MongoDB-admin utilisateur non autorisé

J'essaie d'ajouter une autorisation à mon MongoDB.
Je fais tout cela sur Linux avec MongoDB 2.6.1.
Mon mongod.fichier conf est dans l'ancien format de compatibilité
(voici comment il est venu avec l'installation).

1) j'ai créé l'utilisateur admin comme décrit ici dans (3)

Http://docs.mongodb.org/manual/tutorial/add-user-administrator/

2) j'ai ensuite édité mongod.conf en décommentant cette ligne

auth = true

3) Enfin, j'ai redémarré le mongod service et j'ai essayé de me connecter avec:

/usr/bin/mongo localhost:27017/admin -u sa -p pwd

4) je peux me connecter mais il dit ceci lors de la connexion.

MongoDB shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB shell!
The current date/time is: Thu May 29 2014 17:47:16 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }

5) Maintenant, il semble que cet utilisateur sa que j'ai créé n'ait aucune autorisation.

root@test02:~# mc
MongoDB shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB shell!
The current date/time is: Thu May 29 2014 17:57:03 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
[admin] 2014-05-29 17:57:03.011 >>> use admin
switched to db admin
[admin] 2014-05-29 17:57:07.889 >>> show collections
2014-05-29T17:57:10.377-0400 error: {
        "$err" : "not authorized for query on admin.system.namespaces",
        "code" : 13
} at src/mongo/shell/query.js:131
[admin] 2014-05-29 17:57:10.378 >>> use test
switched to db test
[test] 2014-05-29 17:57:13.466 >>> show collections
2014-05-29T17:57:15.930-0400 error: {
        "$err" : "not authorized for query on test.system.namespaces",
        "code" : 13
} at src/mongo/shell/query.js:131
[test] 2014-05-29 17:57:15.931 >>>

Quel est le problème? J'ai répété toute cette procédure 3 fois et
Je pense que j'ai tout fait comme spécifié dans les documents MongoDB. Mais ça ne fonctionne pas.
Je m'attendais à ce que cet utilisateur sa soit autorisé à faire n'importe quoi pour que
il peut ensuite créer d'autres utilisateurs et donnez-leur des autorisations plus spécifiques.

124
demandé sur peter.petrov 2014-05-30 01:54:10

9 réponses

Je me grattais aussi la tête autour du même problème, et tout a fonctionné après avoir défini le rôle comme root lors de l'ajout du premier utilisateur administrateur.

use admin
db.createUser(
  {
    user: "admin",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  }
);
exit; 

Pour une référence complète des paramètres d'authentification, consultez les étapes que j'ai compilées après des heures de recherche sur internet.

296
répondu s-hunter 2015-04-06 13:23:20

C'est un peu déroutant - je crois que vous devrez vous accorder readWrite pour interroger une base de données. Un utilisateur avec dbadmin ou useradmin peut administrer la base de données (y compris vous accorder des droits supplémentaires) mais ne peut pas effectuer de requêtes ou écrire des données.

Alors accordez-vous readWrite et vous devriez aller bien -

Http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite

29
répondu John Petrone 2014-05-30 01:26:54

Peut - être qu'un exemple rapide de la façon de changer un utilisateur actuel sera utile à quelqu'un. C'est ce que j'étais en fait à la recherche pour.

Suivant les conseils de @JohnPetrone j'ai ajouté readWrite rôle à mon utilisateur admin avec grantRolesToUser

> use admin
> db.grantRolesToUser("admin",["readWrite"])
> show collections
system.users
system.version
25
répondu Bart C 2016-05-04 14:21:12

Vous pouvez essayer: utiliser l'indicateur --authenticationDatabase aide.

mongo --port 27017 -u "admin" -p "password" --authenticationDatabase "admin"
15
répondu jremi 2017-02-22 23:14:58

Je sais que cette réponse arrive très tard dans ce fil, mais j'espère que vous le vérifiez.

La raison pour laquelle vous obtenez cette erreur est basée sur le rôle spécifique que vous avez accordé à l'utilisateur, que vous avez rassemblé maintenant, et oui donner à cet utilisateur le rôle root résoudra votre problème, mais vous devez d'abord comprendre ce que ces rôles font exactement avant de les accorder aux utilisateurs.

Dans le tutoriel, vous avez accordé à l'utilisateur le rôle userAdminAnyDatabase qui lui donne essentiellement la possibilité de gérer les utilisateurs de toutes vos bases de données. Ce que vous essayiez de faire avec votre utilisateur était en dehors de sa définition de rôle.

Le rôle root a ce rôle inclus dans sa définition ainsi que le readWriteAnyDatabase, dbAdminAnyDatabase et d'autres rôles en font un super-utilisateur (essentiellement parce que vous pouvez faire n'importe quoi avec).

Vous pouvez consulter les définitions de rôles pour voir quels rôles vous devrez donner aux utilisateurs pour effectuer certaines tâches. https://docs.mongodb.com/manual/reference/built-in-roles/ Ce n'est pas souhaitable pour rendre tous vos utilisateurs super:)

6
répondu el Punch 2017-09-16 21:04:01

En outre, notez que si votre client shell mongo ne parvient pas à se connecter correctement à l'instance mongod, Vous pouvez recevoir de telles erreurs "Autorisation refusée".

Assurez - vous que votre client ouvre une connexion en vérifiant le port de connexion, mais aussi que le port que vous utilisez dans mongod n'est pas utilisé. Vous pouvez définir un port différent en utilisant le paramètre --port <port> dans le shell et le processus.

0
répondu Nick Louloudakis 2016-08-26 14:13:01

C'est une question simple.

  1. il est important que vous devez changer la base de données cible Pas admin.

Utilisez yourDB

  1. Vérifiez votre authentification db par

Afficher les utilisateurs

  1. Si vous obtenez un objet {} vide, c'est la question. Vous avez juste besoin de taper

Db.createUser( { utilisateur: "yourUser", pwd: mot de passe "", rôles: ["readWrite", " dbAdmin" ] } )

Ou

Db.grantRolesToUser('yourUser',[{ rôle: "dbAdmin", db: "yourDB" }])

0
répondu cocoTW 2018-09-27 11:52:30

J'ai eu un problème similaire ici sur un environnement Windows: J'ai installé Bitnami DreamFactory et il installe également un autre MongoDb qui est démarré au démarrage du système. J'exécutais mon MongoDbService (qui a été démarré sans erreur) mais j'ai remarqué après avoir perdu beaucoup de temps que je me connectais en fait sur le Service MongoDb de Bitnami. Veuillez jeter un oeil s'il n'y a pas une autre instance de mongoDB en cours d'exécution sur votre serveur.

Bonne Chance!

-1
répondu ibirite 2016-02-07 19:39:57

Cela peut être parce que vous n'avez pas défini noAuth = true dans mongodb.conf

# Turn on/off security.  Off is currently the default
noauth = true
#auth = true

Après avoir défini ce paramètre, redémarrez le service en utilisant

Service mongod restart

-5
répondu Buminda 2016-03-22 05:17:40