Una delle prime attività dopo aver avviato il server di database MongoDB è la configurazione di utenti e database. In questo post, esamineremo alcuni degli scenari comuni di creazione e configurazione di utenti in MongoDB. La gestione degli utenti di MongoDB è migliorata in modo molto significativo rispetto alle due versioni precedenti e ora è un modello di gestione degli utenti capace e funzionale. Agli utenti possono essere assegnati vari ruoli e i ruoli possono essere configurati con i privilegi desiderati. Esistono diversi ruoli utente integrati da utilizzare oppure puoi creare i tuoi ruoli personalizzati.
Gli esempi in questo post utilizzano un client 2.6.4 e un server 2.6.4. Notevoli modifiche sono state apportate al modello di gestione degli utenti da 2.4 a 2.6. Quindi, se stai utilizzando un client 2.4, molti degli esempi in questo post non funzioneranno per te. Puoi controllare la versione del client yoMongoDBodb usando la seguente sintassi:
mongo --version
Aggiunta di un utente a un database
Il primo passo dopo aver creato l'utente è creare il database dell'applicazione:
use applicationdb;
Dopo aver creato questo database, vogliamo creare l'utente che verrà utilizzato dall'applicazione per scrivere su questo database. Vogliamo che questo utente abbia i privilegi di lettura e scrittura nel database:
db.createUser({'user':'appuser', 'pwd':'', roles:['readWrite']});
A volte, vogliamo anche aggiungere utenti che hanno accesso in sola lettura al database. Ad esempio, potremmo voler aggiungere un utente di analisi che ha solo accesso in sola lettura al database:
db.createUser({'user':'analyticsuser', 'pwd':'', roles:['read']});
Ora che gli utenti sono stati creati, proviamo a connetterci come questo utente dalla console MongoDB:
mongo -u 'appuser' -p <servername>/applicationdb MongoDB shell version: 2.6.4 connecting to: <servername>/applicationdb >
Dovresti esserti connesso con successo! Nota "/applicationdb" alla fine della sintassi dice a MongoDB di autenticare "appuser" sul database "applicationdb".
Aggiunta di un utente a più database
In molti scenari, è necessario creare più database sul server. Ad esempio, in questo scenario, potrebbe essere necessario creare un altro database "analyticsdb" per archiviare i risultati dell'analisi. L'utente "analytics" ora ha bisogno dell'accesso "in sola lettura" su "applicationdb" e "readWrite" su "analyticsdb".
Allora, come riusciamo a raggiungere questo obiettivo? Dovremmo aggiungere "analyticsuser" a ciascun database? Ciò crea un incubo di gestione a lungo termine poiché vengono aggiunti molti utenti e database. Fortunatamente, c'è una soluzione semplice. Possiamo centralizzare le assegnazioni di ruolo per un utente e archiviarle in un unico database. In questo scenario, preferisco archiviare questi incarichi nel database "admin" poiché è l'hub dell'amministrazione centrale nel server, ma puoi anche archiviarlo in un database separato:
use admin db.createUser({user:'analyticsuser', pwd:'<pass>', roles:[{'role':'read', 'db':'applicationdb'}, { 'role':'readWrite', 'db':'analyticsdb'}]});
Una volta aggiunto, puoi utilizzare "mostra utenti" per mostrare i dettagli dei tuoi utenti. Ecco come appare il mio database di amministrazione:
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"}] } >
Ora che il nostro utente è stato aggiunto, proviamo a connetterci dalla console per verificare l'autenticazione utilizzando la sintassi che abbiamo usato sopra:
mongo -u 'analyticsuser' -p <pass> <servername>/applicationdb
Tuttavia, l'autenticazione non riesce:
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
Il motivo è che 'analyticsuser' è definito nel database 'admin' e non in 'applicationdb'. Il modo per specificarlo è utilizzare il parametro '–authenticationDatabase'.
mongo -u 'analyticsuser' -p <pass> <servername>/applicationdb --authenticationDatabase 'admin'
Questa volta, l'accesso ha esito positivo:
MongoDB shell version: 2.6.4 connecting to: <servername>/applicationdb
Per comprendere meglio i vari altri ruoli integrati disponibili in MongoDB, puoi fare riferimento alla documentazione di MongoDB sui ruoli integrati. Come sempre, se hai ulteriori domande puoi contattarci all'indirizzo [email protected].