En av de första uppgifterna efter att ha fått igång din MongoDB-databasserver är att konfigurera dina användare och databaser. I det här inlägget kommer vi att gå över några av de vanliga scenarierna för att skapa och konfigurera användare i MongoDB. MongoDB-användarhantering har förbättrats mycket avsevärt jämfört med de två tidigare versionerna och är nu en kapabel och funktionell modell för användarhantering. Användare kan tilldelas olika roller och roller kan konfigureras med önskade behörigheter. Det finns flera inbyggda användarroller att använda, eller så kan du skapa dina egna anpassade roller.
Exemplen i det här inlägget använder en 2.6.4-klient och en 2.6.4-server. Betydande förändringar gjordes i användarhanteringsmodellen från 2.4 till 2.6. Så om du använder en 2.4-klient kommer många av exemplen i det här inlägget inte att fungera för dig. Du kan kontrollera versionen av yoMongoDBodb-klienten med följande syntax:
mongo --version
Lägga till en användare i en databas
Det första steget efter att du har skapat din användare är att skapa din applikationsdatabas:
använd applicationdb;
Efter att ha skapat den här databasen vill vi skapa användaren som kommer att användas av applikationen för att skriva till den här databasen. Vi vill att den här användaren ska ha läs- och skrivrättigheter till databasen:
db.createUser({'user':'appuser', 'pwd':'', roles:['readWrite']});
Ibland vill vi också lägga till användare som har skrivskyddad åtkomst till databasen. Vi kanske till exempel vill lägga till en analysanvändare som bara har skrivskyddad åtkomst till databasen:
db.createUser({'user':'analyticsuser', 'pwd':'', roles:['read']});
Nu när användarna har skapats, låt oss försöka ansluta som denna användare från MongoDB-konsolen:
mongo -u 'appuser' -p/applicationdbMongoDB-skalversion:2.6.4ansluter till: /applicationdb>
Du borde ha lyckats ansluta! Notera att "/applicationdb" i slutet av syntaxen säger åt MongoDB att autentisera "appuser" på "applicationdb"-databasen.
Lägga till en användare i flera databaser
I många scenarier behöver vi skapa flera databaser på servern. Till exempel, i det här scenariot kan vi behöva skapa en annan databas "analyticsdb" för att lagra resultaten av analysen. 'Analyticsuser' behöver nu 'read-only'-åtkomst på 'applicationdb' och 'readWrite'-behörigheter på 'analyticsdb'.
Så, hur uppnår vi detta? Ska vi lägga till "analyticsuser" till varje databas? Detta skapar en managementmardröm på lång sikt eftersom många användare och databaser läggs till. Lyckligtvis finns det en enkel lösning. Vi kan centralisera rolltilldelningarna för en användare och lagra dem i en enda databas. I det här scenariot föredrar jag att lagra dessa tilldelningar i "admin"-databasen eftersom det är navet för central administration på servern, men du kan också lagra det i en separat databas:
använd admindb.createUser({user:'analyticsuser', pwd:'', roles:[{'role':'read', 'db':'applicationdb'}, { 'role':' readWrite', 'db':'analyticsdb'}]});
När den väl har lagts till kan du använda "visa användare" för att visa information om dina användare. Så här ser min administratörsdatabas ut:
use admin> visa användare{"_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"}]}>
Nu när vår användare har lagts till, låt oss försöka ansluta från konsolen för att verifiera autentiseringen genom att använda syntaxen vi använde ovan:
mongo -u 'analyticsuser' -p/applicationdb
Autentiseringen misslyckas dock:
2014-10-06T23:11:42.616+0000 Fel:18 { ok:0.0, errmsg:"auth failed", code:18 } på src/mongo/shell/db.js:1210exception:inloggning misslyckades före>Anledningen är att 'analyticsuser' är definierad på 'admin'-databasen och inte på 'applicationdb'. Sättet att specificera detta är att använda parametern ‘–authenticationDatabase’.
mongo -u 'analyticsuser' -p/applicationdb --authenticationDatabase 'admin' Den här gången lyckades inloggningen:
MongoDB-skalversion:2.6.4ansluter till:/applicationdb För att bättre förstå de olika andra inbyggda rollerna som finns tillgängliga i MongoDB kan du hänvisa till MongoDB-dokumentationen om inbyggda roller. Som alltid, om du har ytterligare frågor kan du nå oss på [email protected].