Tutti gli utenti creati in MongoDB 3.x vengono creati con SCRAM-SHA1 che interrompe la compatibilità con le versioni precedenti con gli strumenti che si aspettano MongoDB-CR. C'è una lunga lista di strumenti e driver che non sono stati ancora aggiornati per supportare SCRAM-SHA1, come Robomongo e MongoVUE.
In alcuni casi, anche se è disponibile la versione più recente del driver/ORM, potresti non essere pronto per aggiornare il driver a causa di alcuni problemi di compatibilità.
MongoDB supporta due metodi di autenticazione:
- MongoDB-CR (Sfida-risposta)
Meccanismo per autenticare gli utenti con password. Meccanismo di autenticazione predefinito fino alla 2.6.x. Fare riferimento alla documentazione per maggiori dettagli. - SCRAM-SHA1
Questo è uno standard IETF per i meccanismi di risposta alle sfide per l'autenticazione degli utenti con password. Questo è il sistema più nuovo e più sicuro. Non è retrocompatibile con MongoDB-CR. Fare riferimento alla documentazione per maggiori dettagli.
MongoDB CR è il sistema di autenticazione legacy. MongoDB 3.X ha cambiato il sistema di autenticazione utente predefinito in SCRAM-SHA1. Quindi, tutti i nuovi utenti creati nel sistema sono utenti SCRAM-SHA1. Poiché SCRAM-SHA1 non è compatibile con le versioni precedenti, interrompe l'autenticazione con tutti gli utenti che utilizzano il meccanismo MONGODB-CR.
Tuttavia, potresti voler utilizzare il nuovo motore di archiviazione WiredTiger disponibile in MongoDB 3.x. Di seguito sono riportati i passaggi per configurare MONGODB-CR come meccanismo di autenticazione predefinito in MongoDB 3.x, supponendo che tu stia eseguendo un set di repliche:
- Crea un cluster MongoDB 3.x.
- Arresta tutti i nodi del set di repliche diversi dal primario.
- Disabilita l'autenticazione sul primario e riavvia il nodo. L'ho fatto commentando le seguenti voci nel file di configurazione di MongoDB e riavviando il server:
#security: # authorization: enabled # keyFile: /var/lib/mongo/rskey #replication: # replSetName: RS-rsname-0
- Connettiti al primario e modifica la versione dello schema:
use admin; var schema = db.system.version.findOne({"_id" : "authSchema"}); schema.currentVersion = 3; db.system.version.save(schema)
- Annulla le modifiche al file mongodb.conf nel passaggio 3 sopra e riavvia MongoDB.
- Riavvia MongoDB sugli altri nodi del set di repliche e assicurati che il set di repliche sia integro. Al termine, tutti gli utenti creati sul sistema saranno utenti MongoDB-CR. Puoi convalidarlo eseguendo il seguente comando:
db.system.users.find().pretty();
Nota, tuttavia, questa dovrebbe essere solo una soluzione temporanea. La soluzione più sicura a lungo termine consiste nell'aggiornare il server MongoDB per utilizzare il modello SCRAM-SHA1. Quando sei pronto per l'aggiornamento, esegui il seguente script per aggiornare la versione dello schema dei tuoi utenti a SCRAM-SHA1:
db.getSiblingDB("admin").runCommand({authSchemaUpgrade});