web-dev-qa-db-fra.com

Le super-administrateur MongoDB s’authentifie bien mais obtient toujours des erreurs de requête non autorisées?

J'ai commencé à utiliser MongoDB avec authentification. Conformément à la documentation, j'ai utilisé l'exception localhost pour créer un utilisateur admin avec le rôle unique userAdminAnyDatabase . Tout s'est bien passé. Lorsque j'exécute le client "mongo" et que je l'autorise sur la admin base de données après using cette base de données, je reçois le numéro 1 indiquant que l'autorisation a réussi. Cependant, toute commande que j'essaie d'exécuter entraîne une erreur "non autorisée", même en essayant d'afficher les collections de la base de données d'administration que je viens d'autoriser.

Quelqu'un peut-il me dire pourquoi et comment je peux y remédier? Actuellement, je cours sans authentification jusqu'à ce que je puisse résoudre ce problème.

4
Robert Oschler

Le rôle userAdminAnyDatabase (et le rôle userAdmin dont c'est une extension) donne simplement à votre utilisateur l'autorisation de lire et d'écrire sur la collection system.users pour administrer les utilisateurs d'une base de données. Cela ne permet pas à l'utilisateur de lire ou d'écrire dans les collections réelles de la base de données. Pour cela, vous devez attribuer les rôles read ou readWrite.

Voir Rôles de privilèges utilisateur dans MongoDB et Ajouter un utilisateur à une base de données .

4
David Edwards

Essayez d’exécuter les étapes suivantes pour résoudre le problème d’authentification:

  1. lancez mongod sans authentification activée et lancez:
  2. créer une base de données
  3. créer un utilisateur avec un rôle
  4. créer une collection factice avec un seul document
  5. arrêter/tuer mongod
  6. démarrer Mongod avec l'authentification activée
  7. passer à la base de données créée à l'étape 1
  8. s'authentifier sur la base de données avec l'utilisateur créé à l'étape 3

exemples de commandes:

  1. mongod --port 27017 --dbpath /data/db1
  2. use educationDb;
  3. db.createUser({ user : 'readonly', pwd: 'readonly', roles : ['read']})
  4. db.xyz.insert({"name":"nix.education"})
  5. arrêter/tuer mongod
  6. mongod --auth --port 27017 --dbpath /data/db1
  7. use educationDb;
  8. db.auth('readonly','readonly')
0
nix