MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Guida introduttiva alla gestione degli utenti di MongoDB

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].