sql >> Base de Datos >  >> NoSQL >> MongoDB

mongodb permite la conexión de invitados incluso cuando la autenticación está habilitada

Sí, básicamente puedes conectarte sin autenticación, pero no puedes hacer casi nada. puede ejecutar db.serverBuildInfo()

db.version()

db.adminCommand({ping:1})

db.adminCommand({whatsmyuri:1})

db.adminCommand({features:1})

por ejemplo, tal vez algunos otros comandos.

Lo que parece un poco doloroso para mí es que pueda ejecutar:

for(var i=0;i++<20000;){db.adminCommand({forceerror:1})}

Lo que genera un poco de registro.

Revisé las fuentes y puedes ver que este comportamiento es una especie de error. Las fuentes del inicio del shell están en:https://github.com/mongodb/mongo/blob/master/src/mongo/shell/dbshell.cpp

Básicamente, hay dos tipos de pruebas que se ejecutan contra los valores de los parámetros dados en los argumentos de contraseña y nombre de usuario para mongoshell. El inicio verifica cuándo proporcionó un parámetro --password y no escribió una contraseña después. Y hay una verificación cuando no ha especificado comenzar sin db, y ha especificado un nombre de usuario que es más largo que 0 de lo que intentará autenticar (verifique la línea 1043)

if (!nodb && username.size()) .

Pero eso es todo. Si no especifica las credenciales en absoluto, parece que se conectará sin siquiera intentar autenticarse. Supongo que en la fase de inicialización debe verificarse si el proceso en el que nos conectamos se está ejecutando con autenticación y forzar la autenticación si es necesario.