2016-05-22 23 views
13

Creare un utente con il seguente set di comandi. Questo dovrebbe creare utente in entrambe le admin db così come il mio obiettivo db (C2D):Autenticazione MongoDB 3.2 non riuscita

# mongo 127.0.0.1:27017 
MongoDB shell version: 3.2.6-29-g5c19788 
connecting to: 127.0.0.1:27017/test 
> use admin 
switched to db admin 
> show collections 
system.users 
system.version 
> db.system.users.find() 
> db.createUser({user:"cd2", pwd:"cd2", roles:[{role:"dbOwner", db: "c2d"}]}) 
Successfully added user: { 
    "user" : "cd2", 
    "roles" : [ 
     { 
      "role" : "dbOwner", 
      "db" : "c2d" 
     } 
    ] 
} 
> db.system.users.find() 
{ "_id" : "admin.cd2", "user" : "cd2", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "4g6t9kC+godz7k6QQOfD+A==", "storedKey" : "m3tDZBQDU2Tlb1lIjLGyTHmr2QQ=", "serverKey" : "GSA4OXSod1s8mBuZBtfmXq2tlTo=" } }, "roles" : [ { "role" : "dbOwner", "db" : "c2d" } ] } 
> use c2d 
switched to db c2d 
> db.createUser({user:"cd2", pwd:"cd2", roles:[{role:"dbOwner", db: "c2d"}]}) 
Successfully added user: { 
    "user" : "cd2", 
    "roles" : [ 
     { 
      "role" : "dbOwner", 
      "db" : "c2d" 
     } 
    ] 
} 
> use admin 
switched to db admin 
> db.system.users.find() 
{ "_id" : "admin.cd2", "user" : "cd2", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "4g6t9kC+godz7k6QQOfD+A==", "storedKey" : "m3tDZBQDU2Tlb1lIjLGyTHmr2QQ=", "serverKey" : "GSA4OXSod1s8mBuZBtfmXq2tlTo=" } }, "roles" : [ { "role" : "dbOwner", "db" : "c2d" } ] } 
{ "_id" : "c2d.cd2", "user" : "cd2", "db" : "c2d", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "vnMjnjfykVQS8ujQXeWaYw==", "storedKey" : "OYXivkmIwuTavlwTGfjrspT6j2E=", "serverKey" : "lw8xqzAaW8V4IQ9wOmQrG2VSp88=" } }, "roles" : [ { "role" : "dbOwner", "db" : "c2d" } ] } 

Se provo ad accedere, sto accolto con un messaggio di errore:

# mongo 127.0.0.1:27017/c2d -u c2d -p c2d 
MongoDB shell version: 3.2.6-29-g5c19788 
connecting to: 127.0.0.1:27017/c2d 
2016-05-22T10:35:41.862+0100 E QUERY [thread1] Error: Authentication failed. : 
[email protected]/mongo/shell/db.js:1441:20 
@(auth):6:1 
@(auth):1:2 

exception: login failed 

Poi abilito funzioni di sicurezza nel file di configurazione e riavviare il server:

security: 
    authorization: enabled 

errore è sempre lo stesso:

01.235.
# mongo 127.0.0.1:27017/c2d -u c2d -p c2d 
MongoDB shell version: 3.2.6-29-g5c19788 
connecting to: 127.0.0.1:27017/c2d 
2016-05-22T10:37:43.713+0100 E QUERY [thread1] Error: Authentication failed. : 
[email protected]/mongo/shell/db.js:1441:20 
@(auth):6:1 
@(auth):1:2 

exception: login failed 

risposta

36

Bene, è necessario eseguire un paio di passaggi in sequenza per creare correttamente l'utente.

Prima di tutto, è necessario creare un utente amministratore. Preferisco creare un super utente.

> use admin 
> db.createUser({user: "root", pwd: "123456", roles:["root"]}) 

Riavviare il server MongoDB e abilitare l'autenticazione con --auth bandiera.

> mongod --auth --port 27017 --dbpath /var/lib/mongodb 

Una volta che il server è attivo, connettersi ad esso come amministratore

> mongo <host:port> -u "root" -p "123456" --authenticationDatabase "admin"

Una volta connessi, creare utente normale. Supponendo che il nome del tuo database utente sia cd2.

> use cd2 
> db.createUser({user: "cd2", pwd: "cd2", roles:["dbOwner"]}) 

Se si vede il successo messsage, disconnettersi dal mongo shell e ristabilire il contatto con nuovo utente credenziali.

> mongo <host:port>/cd2 -u "cd2" -p "cd2" 
+2

È così schifo quando trovi una bella risposta al tuo problema, ma non lo risolve Triste Sto facendo esattamente questo, senza successo –

+0

Beh, è ​​un peccato che questa soluzione non ha funzionato per te, tuttavia sembra che funzioni per poche altre persone – Saleem

+0

Sì ... Posso accedere tramite shell, ma non tramite la riga di comando. Molto strano. Non preoccuparti però ... Non ho votato meno a questo :-) –

4

La nostra esperienza con questo problema in MongoDB (3.2.4) è che sembra un bug o una funzionalità non documentata. Se si tenta di creare utenti e ruoli da una shell remota (non localhost), gli utenti vengono creati ma non appena si lascia la shell sono andati (sono transitori a quella sessione) e non sono realmente persistenti.

Soluzione: Basta provare a creare gli utenti (senza autenticazione attivata inizialmente su MongoDB) e farlo direttamente sulla console del server DB (localhost).

+0

Ciao, ho avuto un problema simile. Tranne, ho uno script di shell che fa questo sulla console del mio server DB, con il flag --noauth. Ma succede la stessa cosa. Gli utenti vengono creati ma non appena esco dalla shell (o al termine dello script) non ci sono più! Hai idea del perché questo accada? Non so da dove cominciare a cercare. –

+0

Ciao di nuovo, non importa! L'avevo capito. I miei script di shell stavano terminando 'mongod' con' kill -9', che la documentazione di MongoDB dice che non si dovrebbe mai fare. (Non usare mai ** kill -9 ** (cioè ** SIGKILL **) per terminare un'istanza mongod). Quindi immagino che lo stia mettendo fine in modo ingiusto, anche se non ne sono sicuro, ma penso che cambi quel problema fisso. Io uso 'kill -2' ora –