Een van de eerste taken nadat u uw MongoDB-databaseserver in gebruik heeft genomen, is het configureren van uw gebruikers en databases. In dit bericht bespreken we enkele veelvoorkomende scenario's voor het maken en configureren van gebruikers in MongoDB. MongoDB-gebruikersbeheer is aanzienlijk verbeterd ten opzichte van de vorige twee releases en is nu een capabel en functioneel gebruikersbeheermodel. Gebruikers kunnen verschillende rollen worden toegewezen en rollen kunnen worden geconfigureerd met de gewenste privileges. Er zijn verschillende ingebouwde gebruikersrollen die u kunt gebruiken, of u kunt uw eigen aangepaste rollen maken.
De voorbeelden in dit bericht gebruiken een 2.6.4-client en een 2.6.4-server. Er zijn aanzienlijke wijzigingen aangebracht in het gebruikersbeheermodel van 2.4 naar 2.6. Dus als u een 2.4-client gebruikt, zullen veel van de voorbeelden in dit bericht niet voor u werken. U kunt de versie van de yoMongoDBodb-client controleren met de volgende syntaxis:
mongo --version
Een gebruiker aan een database toevoegen
De eerste stap na het aanmaken van uw gebruiker is het aanmaken van uw applicatiedatabase:
use applicationdb;
Na het aanmaken van deze database, willen we de gebruiker aanmaken die door de applicatie zal worden gebruikt om naar deze database te schrijven. We willen dat deze gebruiker lees- en schrijfrechten heeft voor de database:
db.createUser({'user':'appuser', 'pwd':'', roles:['readWrite']});
Soms willen we ook gebruikers toevoegen die alleen-lezen toegang hebben tot de database. We willen bijvoorbeeld een analysegebruiker toevoegen die alleen alleen-lezen toegang heeft tot de database:
db.createUser({'user':'analyticsuser', 'pwd':'', roles:['read']});
Nu de gebruikers zijn gemaakt, laten we proberen verbinding te maken als deze gebruiker vanuit de MongoDB-console:
mongo -u 'appuser' -p <servername>/applicationdb MongoDB shell version: 2.6.4 connecting to: <servername>/applicationdb >
Je zou succesvol moeten zijn verbonden! Let op de "/applicationdb" aan het einde van de syntaxis vertelt MongoDB om de 'appuser' te authenticeren in de 'applicationdb'-database.
Een gebruiker toevoegen aan meerdere databases
In veel scenario's moeten we meerdere databases op de server maken. In dit scenario moeten we bijvoorbeeld mogelijk een andere database 'analyticsdb' maken om de resultaten van de analyses op te slaan. De 'analyticsgebruiker' heeft nu 'alleen-lezen'-toegang nodig op de 'applicationdb'- en 'readWrite'-machtigingen op de 'analyticsdb'.
Dus, hoe bereiken we dit? Moeten we de 'analyticsgebruiker' aan elke database toevoegen? Dit zorgt op de lange termijn voor een managementnachtmerrie, aangezien er veel gebruikers en databases worden toegevoegd. Gelukkig is er een simpele oplossing. We kunnen de roltoewijzingen voor een gebruiker centraliseren en opslaan in één database. In dit scenario bewaar ik deze toewijzingen bij voorkeur in de 'admin'-database omdat dit de centrale administratie op de server is, maar je kunt ze ook in een aparte database opslaan:
use admin db.createUser({user:'analyticsuser', pwd:'<pass>', roles:[{'role':'read', 'db':'applicationdb'}, { 'role':'readWrite', 'db':'analyticsdb'}]});
Zodra het is toegevoegd, kunt u 'gebruikers tonen' gebruiken om de details van uw gebruikers te tonen. Zo ziet mijn beheerdersdatabase eruit:
use admin > show users { "_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 onze gebruiker is toegevoegd, proberen we verbinding te maken vanaf de console om de authenticatie te verifiëren met behulp van de syntaxis die we hierboven hebben gebruikt:
mongo -u 'analyticsuser' -p <pass> <servername>/applicationdb
Verificatie mislukt echter:
2014-10-06T23:11:42.616+0000 Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18 } at src/mongo/shell/db.js:1210 exception: login failed
De reden is dat de 'analyticsuser' is gedefinieerd in de 'admin'-database en niet in de 'applicationdb'. De manier om dit op te geven is door de parameter ‘–authenticationDatabase’ te gebruiken.
mongo -u 'analyticsuser' -p <pass> <servername>/applicationdb --authenticationDatabase 'admin'
Deze keer lukt het inloggen:
MongoDB shell version: 2.6.4 connecting to: <servername>/applicationdb
Om de verschillende andere ingebouwde rollen die beschikbaar zijn in MongoDB beter te begrijpen, kun je de MongoDB-documentatie over ingebouwde rollen raadplegen. Zoals altijd, als je nog vragen hebt, kun je ons bereiken op [email protected].