sql >> Database >  >> NoSQL >> MongoDB

mongodb staat gastverbinding toe, zelfs als auth is ingeschakeld

Ja, u kunt in principe verbinding maken zonder authenticatie, maar u kunt bijna niets doen. u kunt db.serverBuildInfo() . uitvoeren

db.version()

db.adminCommand({ping:1})

db.adminCommand({whatsmyuri:1})

db.adminCommand({features:1})

bijvoorbeeld misschien enkele andere commando's.

Wat mij een beetje pijn lijkt, is dat rennen:

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

Wat een beetje log genereert.

Ik heb de bronnen gecontroleerd en je kunt zien dat dit gedrag een soort bug is. De bronnen van het opstarten van de shell bevinden zich in:https://github.com/mongodb/mongo/blob/master/src/mongo/shell/dbshell.cpp

In principe zijn er twee soorten tests die worden uitgevoerd tegen de parameterwaarden die worden gegeven in wachtwoord- en gebruikersnaamargumenten voor mongoshell. Het opstarten controleert wanneer je een --password parameter hebt opgegeven en daarna geen wachtwoord hebt geschreven. En er is een controle als je niet hebt opgegeven om te starten zonder db, en je hebt een gebruikersnaam opgegeven die langer is dan 0 dan het zal proberen te authenticeren (controleer regel 1043)

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

Maar dat is alles. Als u helemaal geen inloggegevens opgeeft, lijkt het erop dat er verbinding wordt gemaakt zonder zelfs maar te proberen te verifiëren. Ik denk dat het in de initialisatiefase moet worden gecontroleerd of het proces waarmee we verbinding maken met authenticatie wordt uitgevoerd en authenticatie moet worden uitgeschakeld als dat nodig is.



  1. Spark op HBase met Spark-shell

  2. Query MongoDB met behulp van 'ObjectId'

  3. Volgorde van $lt en $gt in MongoDB-bereikquery

  4. hoe u een alleen-lezen-query uitvoert op een shard-replicaset in mongodb