Ja, im Grunde können Sie sich ohne Authentifizierung verbinden, können aber fast nichts tun. Sie können db.serverBuildInfo()
ausführen
db.version()
db.adminCommand({ping:1})
db.adminCommand({whatsmyuri:1})
db.adminCommand({features:1})
zum Beispiel vielleicht einige andere Befehle.
Was mir ein bisschen weh tut, ist, dass ich laufen kann:
for(var i=0;i++<20000;){db.adminCommand({forceerror:1})}
Was ein bisschen Protokoll erzeugt.
Ich habe die Quellen überprüft, und Sie können sehen, dass dieses Verhalten eine Art Fehler ist. Die Quellen des Shell-Starts sind in:https://github.com/mongodb/mongo/blob/master/src/mongo/shell/dbshell.cpp
Grundsätzlich gibt es zwei Arten von Tests, die gegen die Parameterwerte laufen, die in Passwort- und Benutzernamen-Argumenten für Mongoshell angegeben sind. Der Start prüft, wenn Sie einen --password Parameter angegeben haben und danach kein Passwort geschrieben haben. Und es gibt eine Überprüfung, wenn Sie nicht angegeben haben, ohne db zu starten, und Sie einen Benutzernamen angegeben haben, der länger als 0 ist, als es versuchen wird, sich zu authentifizieren (überprüfen Sie Zeile 1043)
if (!nodb && username.size())
.
Aber das ist alles. Wenn Sie überhaupt keine Anmeldeinformationen angeben, wird anscheinend eine Verbindung hergestellt, ohne auch nur zu versuchen, sich zu authentifizieren. Ich denke, in der Initialisierungsphase sollte überprüft werden, ob der Prozess, bei dem wir eine Verbindung herstellen, mit Authentifizierung ausgeführt wird, und bei Bedarf die Authentifizierung erzwingen.