2015-03-12 4 views
46

Viene visualizzato l'errore seguente durante l'autenticazione dell'utente: purchase_user @ purchase failed. Autenticazione MongoDB-CR fallita. Credenziali mancanti nel documento utente quando accedo al servizio web tramite browser.Autenticazione MongoDB-CR non riuscita

Ma sono in grado di autenticare purchase_user da mongo restituisce 1.

risposta

77

andare a console MongoDB e cancellare l'utente & versione corrente set authSchema a 3 invece di 5, seguire questi comandi in consolle Mongo -

mongo 
use admin 
db.system.users.remove({}) <== removing all users 
db.system.version.remove({}) <== removing current version 
db.system.version.insert({ "_id" : "authSchema", "currentVersion" : 3 }) 

Ora riavviare il mongod e creare un nuovo utente, quindi dovrebbe funzionare bene.

Nota: utilizzare i comandi di rimozione solo nel db di test, se in produzione utilizzare l'aggiornamento.

+0

Questo non può causare problemi di incoerenza o di sicurezza? Per la cronaca, la tua soluzione ha risolto il mio problema. –

+0

Grazie, ha funzionato per me. Solo per l'apprendimento, perché questo problema aumenta? – Shahzeb

+1

Tieni presente che, PRIMA DI SCARICARE LO SCHEMA, DISATTIVA l'autenticazione, altrimenti l'utente verrà invalidato non appena si rimuovono gli utenti da db.system.users. Mi raccomando –

19

Aveva lo stesso problema. Quello che mi stava succedendo era che quando usavo MongoDB 3 per creare il mio utente, stava usando SCRAM-SHA-1 come meccanismo di autenticazione invece di MongoDB-CR. Quello che dovevo fare era:

  1. voce dell'Elenco
  2. eliminare l'utente creato.
  3. Modificare la raccolta admin.system.version in modo che currentSersione di authSchema sia 3 anziché 5 (3 sta utilizzando MongoDB-CR).
  4. Ricrea il tuo utente.

Dovrebbe funzionare senza problemi ora.

+0

Questo dovrebbe essere contrassegnato come una risposta corretta, di sicuro. – Mateusz

16

Il passaggio numero 2. sopra non è dettagliato in modo esplicito, ho trovato questa soluzione e ha funzionato per me.

var schema = db.system.version.findOne({"_id" : "authSchema"}) 
schema.currentVersion = 3 
db.system.version.save(schema) 
+1

dove lo faccio? E quali sono i privilegi dell'utente? Quando provo, "non sono autorizzato per la query su admin.system.version". –

+0

Hey @MarcMaxson vedi la mia risposta qui sotto. È necessario eliminare l'amministratore iniziale e ricrearne uno dopo aver eseguito i comandi forniti da acabra. Qualsiasi amministratore creato prima di apportare modifiche allo schema non funzionerà. Questo mi ha fatto impazzire. –

0

Stavo ottenendo anche questo errore.

Controlla il tuo file di configurazione di primavera .. Avevo un argomento di costruzione chiamato "MONGODB-CR" che ho sostituito con "SCRAM-SHA-1" e ha risolto il problema.

coda il file di registro mongodb mi ha aiutato a diagnosticare questo.

9

penso che questa è la risposta che serve:

1) Avviare 3.0 senza autenticazione abilitato. (L'autenticazione deve essere disabilitata altrimenti si otterrà l'errore non autorizzato).

2) Run (dopo aver selezionato "admin" uso db):

var schema = db.system.version.findOne({"_id" : "authSchema"})

schema.currentVersion = 3

db.system.version.save(schema)

3) mongodb riavvio con autenticazione abilitato.

4) Creare un nuovo utente amministratore (quello vecchio, quello creato prima di questa soluzione alternativa non funzionerà).

Le cose dovrebbero funzionare ora. Questo problema mi stava facendo impazzire.

risposta è arrivata da qui: https://jira.mongodb.org/browse/SERVER-17459

3

Aggiornamento di mongo-java-driver a 3.0.3 ed impiego: -

MongoCredential.createScramSha1Credential anziché MongoCredential.createMongoCRCredential

MongoCredential createMongoCRCredential = MongoCredential.createScramSha1Credential (. MongoConfiguration.getDatabaseUserName(), mongoConfiguration.getAuthenticationDatabase(), mongoConfiguration.getDatabasePassword() toCharArray()) ;

http://docs.mongodb.org/master/release-notes/3.0-scram/

+0

Non sono proprio sicuro che questo risponda alla domanda ... –

+0

Questa era esattamente la correzione che stavo cercando per il problema che avevo. Avevo creato l'utente inizialmente usando il cli mongo per la versione 3.2.4. Aveva creato l'utente usando il processo SHA1. Il mio codice stava cercando di connettersi usando il precedente processo CR. Il passaggio a MongoCredential.createScramSha1Credential() era di gran lunga la soluzione migliore piuttosto che il downgrade. – theINtoy

0

Probabilmente una notizia vecchia, e problema risolto, ma aggiungendo la mia esperienza con lo stesso errore:

Ho avuto lo stesso problema esatto (usando MongoDB 3.0), e un driver C# che è stato installato a utilizzare un pre 3.0 db.

In C# ho usato "MongoDB.Driver.CreateMongoCRCredentials()", che ha causato l'errore che l'OP stava ottenendo.

La correzione (per me), era quella di passare il comando sopra a "MongoDB.Driver.CreateCredential()".

Immagino che ciò potrebbe essere causato dall'uso di utenti "vecchi" (dalla versione 3.0) su un sistema aggiornato. Quale ti obbliga ad aggiornare i tuoi utenti al nuovo meccanismo di autenticazione o a declassare il meccanismo di autenticazione sul tuo server.

7

Aggiungendo alla soluzione di cui sopra da Vivek & spiegazione preso from here

use admin 
db.system.users.remove({}) <== removing all users 
db.system.version.remove({}) <== removing current version 
db.system.version.insert({ "_id" : "authSchema", "currentVersion" : 3 }) 
  • avete solo bisogno di declassare lo schema per creare utenti MongoDB-CR. Una volta lì, i vecchi driver funzioneranno indipendentemente dal valore di authSchemaVersion. Tuttavia, se esegui authSchemaUpgrade per modificare da "3" a "5", gli utenti saranno ovviamente aggiornati.
  • Il mio commento riguardante i nuovi utenti era che se si hanno già utenti SCRAM e si modifica lo schema manualmente in "3" i documenti utente non saranno coerenti con il nuovo schema. Tuttavia, ciò non viene applicato, ma gli utenti SCRAM continueranno a funzionare per qualsiasi driver che supporta SCRAM.
0

Per me stavo usando un client mongo 2 che tentava di connettersi a un server mongo 3. L'aggiornamento del client ha risolto il problema.

-1

Ho avuto lo stesso errore con un'applicazione Spring Boot utilizzando un nuovo database MongoDB 3.2.8. Con l'aggiornamento alla versione più recente del driver Java Mongo (3.2.2) e poi aggiungendo il parametro meccanismo di autenticazione per l'URI nei miei application.properties, sono stato in grado di farlo funzionare:

spring.data.mongodb.uri=mongodb://myusername:[email protected]/?authSource=admin&authMechanism=SCRAM-SHA-1 
spring.data.mongodb.database=test