MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

mongodb autorise la connexion invité même lorsque l'authentification est activée

Oui, en gros, vous pouvez vous connecter sans authentification mais vous ne pouvez presque rien faire. vous pouvez exécuter db.serverBuildInfo()

db.version()

db.adminCommand({ping:1})

db.adminCommand({whatsmyuri:1})

db.adminCommand({features:1})

par exemple, peut-être d'autres commandes.

Ce qui me semble un peu pénible, c'est que je suis capable de courir :

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

Ce qui génère un peu de log.

J'ai vérifié les sources, et vous pouvez voir que ce comportement est une sorte de bogue. Les sources du démarrage du shell sont dans :https ://github.com/mongodb/mongo/blob/master/src/mongo/shell/dbshell.cpp

Fondamentalement, il existe deux types de tests exécutés sur les valeurs de paramètre données dans les arguments de mot de passe et de nom d'utilisateur pour mongoshell. Le démarrage vérifie si vous avez fourni un paramètre --password et n'avez pas écrit de mot de passe après. Et il y a une vérification lorsque vous n'avez pas spécifié de démarrer sans db, et que vous avez spécifié un nom d'utilisateur qui est plus long que 0 qu'il essaiera d'authentifier (vérifiez la ligne 1043)

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

Mais c'est tout. Si vous ne spécifiez pas du tout d'informations d'identification, il semble qu'il se connectera sans même essayer de s'authentifier. Je suppose que dans la phase d'initialisation, il convient de vérifier si le processus auquel nous nous connectons est en cours d'exécution avec l'authentification et de forcer l'authentification si nécessaire.