Jedním z prvních úkolů po spuštění databázového serveru MongoDB je konfigurace uživatelů a databází. V tomto příspěvku si projdeme některé běžné scénáře vytváření a konfigurace uživatelů v MongoDB. Správa uživatelů MongoDB se oproti předchozím dvěma vydáním velmi výrazně zlepšila a nyní je schopným a funkčním modelem správy uživatelů. Uživatelům lze přiřadit různé role a role lze konfigurovat s požadovanými oprávněními. Existuje několik integrovaných uživatelských rolí, které lze použít, nebo si můžete vytvořit své vlastní role.
Příklady v tomto příspěvku používají klienta 2.6.4 a server 2.6.4. Značné změny byly provedeny v modelu správy uživatelů z 2.4 na 2.6. Pokud tedy používáte klienta 2.4, mnoho příkladů v tomto příspěvku pro vás nebude fungovat. Verzi klienta yoMongoDBodb můžete zkontrolovat pomocí následující syntaxe:
mongo --version
Přidání uživatele do databáze
Prvním krokem po vytvoření uživatele je vytvoření databáze aplikace:
použijte applicationdb;
Po vytvoření této databáze chceme vytvořit uživatele, kterého bude aplikace používat k zápisu do této databáze. Chceme, aby tento uživatel měl oprávnění pro čtení a zápis do databáze:
db.createUser({'user':'appuser', 'pwd':'', roles:['readWrite']});
Někdy také chceme přidat uživatele, kteří mají k databázi přístup pouze pro čtení. Můžeme například chtít přidat analytického uživatele, který má k databázi přístup pouze pro čtení:
db.createUser({'user':'analyticsuser', 'pwd':'', roles:['read']});
Nyní, když jsou uživatelé vytvořeni, pokusme se připojit jako tento uživatel z konzole MongoDB:
mongo -u 'appuser' -p/applicationdbMongoDB shell verze:2.6.4připojování k: /applicationdb>
Měli byste se úspěšně připojit! Všimněte si, že „/applicationdb“ na konci syntaxe říká MongoDB, aby autentizoval „appuser“ v databázi „applicationdb“.
Přidání uživatele do více databází
V mnoha scénářích potřebujeme na serveru vytvořit více databází. V tomto scénáři můžeme například potřebovat vytvořit další databázi „analyticsdb“, abychom uložili výsledky analýzy. Uživatel „analyticsuser“ nyní potřebuje přístup „pouze pro čtení“ k „applicationdb“ a oprávnění „readWrite“ k „analyticsdb“.
Jak toho tedy dosáhneme? Měli bychom do každé databáze přidat „analyticsuser“? To vytváří z dlouhodobého hlediska noční můru správy, protože se přidává mnoho uživatelů a databází. Naštěstí existuje jednoduché řešení. Můžeme centralizovat přiřazení rolí pro uživatele a uložit je do jediné databáze. V tomto scénáři dávám přednost ukládání těchto přiřazení do databáze „admin“, protože je to centrum centrální správy na serveru, ale můžete je také uložit do samostatné databáze:
use admindb.createUser({user:'analyticsuser', pwd:'', roles:[{'role':'read', 'db':'applicationdb'}, { 'role':' readWrite', 'db':'analyticsdb'}]});
Po přidání můžete použít „zobrazit uživatele“ k zobrazení podrobností o vašich uživatelích. Moje databáze administrátorů vypadá takto:
use admin> zobrazit uživatele{"_id" :"admin.admin","user" :"admin","db" :"admin","roles" :[{ "role" :"root"," db" :"admin"},{"role" :"restore","db" :"admin"}]}{"_id" :"admin.analyticsuser","user" :"analyticsuser","db" :"admin","roles" :[{"role" :"read","db" :"applicationdb"},{"role" :"readWrite","db" :'analyticsdb"}]}>
Nyní, když je náš uživatel přidán, zkusme se připojit z konzole a ověřit ověření pomocí syntaxe, kterou jsme použili výše:
mongo -u 'analyticsuser' -p/applicationdb
Ověření se však nezdařilo:
2014-10-06T23:11:42.616+0000 Error:18 { ok:0.0, errmsg:"auth failed", code:18 } at src/mongo/shell/db.js:1210exception:login failedDůvodem je, že „analyticsuser“ je definován v databázi „admin“, nikoli v „applicationdb“. Způsob, jak to určit, je použít parametr ‚–authenticationDatabase‘.
mongo -u 'analyticsuser' -p/applicationdb --authenticationDatabase 'admin' Tentokrát bylo přihlášení úspěšné:
Verze prostředí MongoDB:2.6.4připojování k:/applicationdb Chcete-li lépe porozumět různým dalším integrovaným rolím dostupným v MongoDB, můžete se podívat na dokumentaci MongoDB o vestavěných rolích. Jako vždy, pokud máte další otázky, můžete nás kontaktovat na adrese [email protected].