Tous les utilisateurs créés dans MongoDB 3.x sont créés avec SCRAM-SHA1 qui rompt la compatibilité descendante avec les outils qui attendent MongoDB-CR. Il existe une longue liste d'outils et de pilotes qui n'ont pas encore été mis à jour pour prendre en charge SCRAM-SHA1, tels que Robomongo et MongoVUE.
Dans certains cas, même si la version la plus récente du pilote/ORM est disponible, vous n'êtes peut-être pas prêt à mettre à niveau votre pilote en raison de problèmes de compatibilité.
MongoDB prend en charge deux méthodes d'authentification :
- MongoDB- CR (défi-réponse)
Mécanisme pour authentifier les utilisateurs avec des mots de passe. Mécanisme d'authentification par défaut jusqu'à 2.6.x. Reportez-vous à la documentation pour plus de détails. - SCRAM-SHA1
Il s'agit d'une norme IETF pour les mécanismes de défi-réponse permettant d'authentifier les utilisateurs avec des mots de passe. Il s'agit du système le plus récent et le plus sécurisé. Il n'est pas rétrocompatible avec MongoDB-CR. Reportez-vous à la documentation pour plus de détails.
MongoDB CR est le système d'authentification hérité. MongoDB 3.X a basculé le système d'authentification utilisateur par défaut sur SCRAM-SHA1. Ainsi, tous les nouveaux utilisateurs créés dans le système sont des utilisateurs SCRAM-SHA1. Étant donné que SCRAM-SHA1 n'est pas rétrocompatible, il rompt l'authentification avec tous les utilisateurs utilisant le mécanisme MONGODB-CR.
Cependant, vous souhaiterez peut-être utiliser le nouveau moteur de stockage WiredTiger disponible dans MongoDB 3.x. Voici les étapes pour configurer MONGODB-CR comme mécanisme d'authentification par défaut dans MongoDB 3.x, en supposant que vous exécutez un jeu de réplicas :
- Créez un cluster MongoDB 3.x.
- Arrêtez tous les nœuds du jeu de répliques autres que le nœud principal.
- Désactivez l'authentification sur le nœud principal et redémarrez le nœud. Pour ce faire, j'ai commenté les entrées suivantes dans le fichier de configuration MongoDB et redémarré le serveur :
#security: # authorization: enabled # keyFile: /var/lib/mongo/rskey #replication: # replSetName: RS-rsname-0
- Connectez-vous au serveur principal et modifiez la version du schéma :
use admin; var schema = db.system.version.findOne({"_id" : "authSchema"}); schema.currentVersion = 3; db.system.version.save(schema)
- Annulez les modifications apportées au fichier mongodb.conf à l'étape 3 ci-dessus et redémarrez MongoDB.
- Redémarrez MongoDB sur les autres nœuds du jeu de répliques et assurez-vous que le jeu de répliques est sain. Une fois cela fait, tous les utilisateurs créés sur le système seront des utilisateurs MongoDB-CR. Vous pouvez le valider en exécutant la commande suivante :
db.system.users.find().pretty();
Notez cependant que cela ne devrait être qu'une solution de contournement temporaire. La solution la plus sécurisée à long terme consiste à mettre à niveau votre serveur MongoDB pour utiliser le modèle SCRAM-SHA1. Une fois que vous êtes prêt à mettre à niveau, exécutez le script suivant pour mettre à niveau la version de schéma de vos utilisateurs vers SCRAM-SHA1 :
db.getSiblingDB("admin").runCommand({authSchemaUpgrade});