sql >> Databáze >  >> NoSQL >> MongoDB

mongodb umožňuje připojení hosta, i když je povoleno auth

Ano, v zásadě se můžete připojit bez ověření, ale nemůžete dělat téměř nic. můžete spustit db.serverBuildInfo()

db.version()

db.adminCommand({ping:1})

db.adminCommand({whatsmyuri:1})

db.adminCommand({features:1})

třeba nějaké další příkazy.

Což se mi zdá trochu bolestivé, je to, že je možné běžet:

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

Což generuje kousek protokolu.

Zkontroloval jsem zdroje a můžete vidět, že toto chování je druh chyby. Zdroje spuštění shellu jsou v:https://github.com/mongodb/mongo/blob/master/src/mongo/shell/dbshell.cpp

V zásadě existují dva typy testů běžících proti hodnotám parametrů uvedeným v argumentech hesla a uživatelského jména pro mongoshell. Spuštění zkontroluje, zda jste zadali parametr --password a nezapsali jste heslo. A dojde ke kontrole, když jste nezadali spuštění bez db a zadali jste uživatelské jméno, které je delší než 0, než se pokusí ověřit (kontrolní řádek 1043)

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

Ale to je vše. Pokud vůbec nezadáte přihlašovací údaje, zdá se, že se připojí, aniž by se pokusili ověřit. Myslím, že v inicializační fázi by se mělo zkontrolovat, zda proces, kde se připojujeme, běží s ověřováním a v případě potřeby vynutit autentizaci.



  1. Automaticky komprimovat odstraněný prostor v mongodb?

  2. Jak nainstalovat MongoDB 4.2 na systémy RedHat/CentOS 7

  3. Foreman okamžitě končí

  4. Jak vrátit výsledky Mongoose z metody hledání?