2015-06-27 20 views
5

Ho un'istanza MEAN Bitnami in esecuzione su EC2. Dopo molto tempo, sono riuscito a connettermi al DB usando la shell locale. Ho creato utenti autenticati con tutte le autorizzazioni necessarie per accedere ai dati e quando eseguo il codice riportato di seguito, sono in grado di accedere al DB senza problemi.Mongo "auth failed" Solo per connessioni remote. Lavori locali multa

sudo mongo admin -u <USERNAME-p <PASSWORD> 

Detto questo, quando si tenta di ripetere questa operazione utilizzando una connessione remota sto ripetutamente dato un "autenticazione fallita" Errore da MongoDB.

mongo <HOST>:<PORT>/<DATABASE> -u <USERNAME> -p <PASSWORD> 

...

Questo è strano perché sto usando le stesse credenziali esatte come faccio in esecuzione la shell locale. L'unica differenza è che sto includendo l'host e le informazioni sulla porta. Da allora ho anche confermato che la mia connessione remota funziona se disattivo il parametro auth in mongodb.config.

mongo <HOST>:<PORT>/<DATABASE> 

Ovviamente, in produzione voglio essere in grado di autenticare. Qualcuno di voi ha suggerimenti sul motivo per cui esiste una discrepanza tra l'autenticazione remota e quella locale?

risposta

23

Mi trovavo di fronte allo stesso problema.

Il problema per me:

mio guscio mongo locali era v2.6.10. Utilizza un metodo di autenticazione chiamato MONGODB-CR that has been deprecated.

La versione del mio server è v3.0.4. Utilizza un metodo di autenticazione chiamato SCRAM-SHA-1.

tenta di controllare le vostre versioni shell e server remoti locali:

mongo --version 
mongod --version 

Se sono diversi, aggiornate la vostra shell locale per v3. (Ho dovuto disinstallare e installare di nuovo.)

+2

Grazie! Mi ero dimenticato di aver postato su questo. Ma questo era davvero il problema. Sono contento di non essere l'unico che è stato bloccato da questo. –

+0

Hai salvato le mie ore –

0

Questo è principalmente dovuto a motivi di sicurezza.

Quando si ha accesso all'ambiente locale, è facile presumere che si sia un amministratore del sistema o uno sviluppatore perché si ha accesso alla macchina stessa.

Se non si ha accesso al computer locale, non è possibile garantire questo, e poiché una sicurezza del database è davvero importante (nella maggior parte dei casi), ha senso non abilitare l'accesso remoto. Ovviamente puoi disabilitarlo, ma non è raccomandato.

Spero di aver aiutato.

+0

Come si abilita l'accesso remoto? –

+0

È documentato nella wiki (è solo necessario cambiare l'indirizzo di bind in 0.0.0.0): https://wiki.bitnami.com/Components/mongoDB#section_6 – marcosbc

+0

Sì. Ho provato questo. Non affronta il problema dell'autorizzazione. La modifica dell'indirizzo di bind mi ha permesso di accedere al mongohost remoto solo quando ho disabilitato completamente il parametro auth in mongodb.config. Ma non ha risolto il problema relativo all'accesso remoto. –

0

Installare la stessa versione sia sul server e sul client risolto il problema per me. Come spiegato in precedenza su @Alexandre, è probabilmente un problema di crittografia della password. MongoDB versione 3.2.7

ho provato con successo con i due metodi:

mongo --host "your_host" --port "your_port" --username "your_user" --password "your_pass" --authenticationDatabase "your_admin_db" 

mongo "your_host:your_port/your_db" --username "your_user" --password "your_pass" --authenticationDatabase "your_admin_db" 

Inoltre, assicurarsi che il server è disponibile per gli accessi remoti. Vedi i dettagli sulla rete.bindIp a https://docs.mongodb.com/v3.2/reference/configuration-options/

1

mi aveva precedentemente installerà MongoDB versione 3.2.12 ed è stato in grado di connettersi a un'istanza remota utilizzando:

mongo -u ‘<USERNAME>’ -p ‘<PASSWORD>’ --host <REPLICA_SET>/<HOST>:<PORT> admin 

sto creando un nuovo cluster con la versione 3.4.2 e non è stato in grado connettersi con lo stesso comando. Dopo aver provato molte diverse opzioni, sono finalmente riuscito a capire che avevo bisogno di aggiungere --authenticationDatabase prima del database di amministrazione.

mongo -u ‘<USERNAME>’ -p ‘<PASSWORD>’ --host <REPLICA_SET>/<HOST>:<PORT> --authenticationDatabase admin 
0

Solo nel caso qualcuno urta lo stesso problema, l'authenticationDatabase è necessario solo se si è creato l'utente in un altro database. Se crei l'utente nel database a cui ti colleghi, nessun problema.

Quindi fai attenzione: usa quindi crea utente.

Se ti capita di creare il tuo utente nel database di amministrazione allora sì hai bisogno del flag authenticationDatabase.