web-dev-qa-db-fra.com

MongoDB - non autorisé à exécuter la commande

J'ai réussi à activer l'autorisation sur MongoDB et j'ai créé un compte sur la base de données d'administration, puis j'ai créé un compte pour ma base de données appelé test. La chaîne de connexion suivante pour se connecter à ma base de données de test fonctionne correctement: mongo --Host 192.168.17.52 --port 27017 -u user1 -p password --authenticationDatabase test

Le seul problème que j'ai maintenant est que je ne peux pas exécuter de commandes telles que: show dbs. J'obtiens l'erreur suivante lorsque j'essaie de le faire:

"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0, lsid: { id: UUID(\"a1d5bc0d-bc58-485e-b232-270758a89455\") }, $db: \"admin\" }"

J'ai consulté de nombreuses sources en ligne pour résoudre ce problème, mais pas de chance, existe-t-il un moyen de résoudre ce problème? Il semble que mon utilisateur ne puisse pas accéder à la base de données d'administration. Existe-t-il un moyen d'accorder cet accès à mon utilisateur afin que je puisse exécuter les commandes nécessaires comme show dbs?

Toute aide est très appréciée! :)

6
Hasan

Pour exécuter show dbs et si l'utilisateur a accès à plusieurs bases de données, il doit d'abord être créé sur la base de données admin (car l'action listDatabases est une opération à l'échelle du cluster). L'utilisateur doit également avoir accès à cette opération. Pour ce faire, un nouveau rôle doit être créé avec l'action. Voici les étapes pour le même:

// connectez-vous avec admin avec --authenticationDatabase "admin" (l'hypothèse est que l'utilisateur admin dispose des privilèges root), puis exécutez ce qui suit:

use admin;

db.runCommand({ createRole: "listDatabases", privileges: [{ resource: { cluster : true }, actions: ["listDatabases"]} ], roles: [] });

db.createUser({user:"testUser", pwd:"passwd", roles:[{role:"read", db:"db1"},{role:"read", db:"db2"},{ role: "listDatabases", db: "admin" }]});

// quitter en tant qu'administrateur et se connecter en tant que testUser: notez le --authenticationDatabase "admin"

mongo -u "testUser" -p --authenticationDatabase "admin"

après vous être connecté, exécutez la commande ci-dessous et elle devrait répertorier toutes les bases de données:

show dbs;

Ce qui suit fonctionnera bien même si l'utilisateur n'a pas accès à la base de données admin:

use admin;

Mais alors ce qui suit donnera une erreur:

show collections;
1
nabeel

Le problème est lié à la base de données que vous utilisez avec le --authenticationDatabase paramètre.

Vous vous connectez à mongo avec l'utilisateur de votre base de données de test qui n'a aucun privilège pour exécuter les commandes listDatabase.

Faisons cela en utilisant la base de données d'administration comme base de données d'authentification

mongo --Host 192.168.17.52 --port 27017 -u user1 -p password --authenticationDatabase admin

puis exécutez la commande

show dbs
0
MetalMad