Tak, w zasadzie możesz się połączyć bez uwierzytelniania, ale nie możesz zrobić prawie nic. możesz uruchomić db.serverBuildInfo()
db.version()
db.adminCommand({ping:1})
db.adminCommand({whatsmyuri:1})
db.adminCommand({features:1})
na przykład może jakieś inne polecenia.
Co wydaje mi się trochę bolesne, ponieważ potrafię biegać:
for(var i=0;i++<20000;){db.adminCommand({forceerror:1})}
Co generuje trochę dziennika.
Sprawdziłem źródła i widać, że to zachowanie jest rodzajem błędu. Źródła uruchamiania powłoki znajdują się w:https://github.com/mongodb/mongo/blob/master/src/mongo/shell/dbshell.cpp
Zasadniczo istnieją dwa rodzaje testów działających na wartości parametrów podanych w argumentach hasła i nazwy użytkownika dla powłoki mongoshell. Uruchamianie sprawdza, czy podałeś parametr --password i nie wpisałeś hasła. I jest sprawdzanie, gdy nie określiłeś, aby rozpocząć bez db, a określiłeś nazwę użytkownika dłuższą niż 0, niż będzie próbował się uwierzytelnić (linia sprawdzania 1043)
if (!nodb && username.size())
.
Ale to wszystko. Jeśli w ogóle nie określisz poświadczeń, wydaje się, że połączy się nawet bez próby uwierzytelnienia. Myślę, że w fazie inicjalizacji należy sprawdzić, czy proces, w którym się łączymy, działa z uwierzytelnianiem i wymusić uwierzytelnienie, jeśli jest to konieczne.