J'essaie d'ajouter une autorisation à ma MongoDB.
Je fais tout cela sous Linux avec MongoDB 2.6.1.
Mon fichier mongod.conf est dans l'ancien format de compatibilité.
(c’est comme cela est venu avec l’installation).
1) J'ai créé un utilisateur administrateur 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 service Mongod 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éé ne dispose d'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 avoir tout fait comme spécifié dans la documentation de MongoDB. Mais ça ne marche 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 leur accorder des autorisations plus spécifiques.
Je me demandais aussi comment résoudre le même problème et tout a fonctionné une fois que j'ai défini le rôle en tant que root lors de l'ajout du premier utilisateur administrateur.
use admin
db.createUser(
{
user: 'admin',
pwd: 'password',
roles: [ { role: 'root', db: 'admin' } ]
}
);
exit;
Si vous avez déjà créé l'utilisateur admin
, vous pouvez modifier le rôle comme suit:
use admin;
db.grantRolesToUser('admin', [{ role: 'root', db: 'admin' }])
Pour une référence complète sur les paramètres d'authentification, reportez-vous à la étapes J'ai compilé après des heures de recherche sur Internet.
C'est un peu déroutant - je pense que vous devrez vous accorder vous-même readWrite pour interroger une base de données. Un utilisateur avec dbadmin ou useradmin peut administrer la base de données (y compris en vous accordant des droits supplémentaires) mais ne peut pas effectuer de requêtes ni écrire de données.
alors accordez-vous readWrite et ça devrait aller -
http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
Peut-être qu'un exemple rapide sur la façon de changer un utilisateur actuel sera utile à quelqu'un. C'est ce que je cherchais réellement.
Suivant les conseils de @JohnPetrone, j’ai ajouté le rôle readWrite à mon utilisateur administrateur avec grantRolesToUser
> use admin
> db.grantRolesToUser("admin",["readWrite"])
> show collections
system.users
system.version
Vous pouvez essayer: L’aide de l’indicateur --authenticationDatabase vous aide.
mongo --port 27017 -u "admin" -p "password" --authenticationDatabase "admin"
Je sais que cette réponse arrive très tard dans ce sujet, mais j'espère que vous y jetterez un coup d'oeil.
La raison pour laquelle vous obtenez cette erreur est basée sur le rôle spécifique que vous avez attribué à l'utilisateur, que vous avez déjà collecté, et oui, le fait de lui attribuer le rôle root
résoudra votre problème, mais vous devez d'abord comprendre en quoi ces rôles faire exactement avant de les accorder aux utilisateurs.
Dans le didacticiel, vous avez attribué à l'utilisateur le rôle userAdminAnyDatabase
, qui permet à l'utilisateur de gérer les utilisateurs de toutes vos bases de données. Ce que vous tentiez de faire avec votre utilisateur était en dehors de la définition de son rôle.
Le rôle root
inclut ce rôle dans la définition, ainsi que readWriteAnyDatabase
, dbAdminAnyDatabase
et d'autres rôles qui en font un superutilisateur (essentiellement parce que vous pouvez tout faire avec.).
Vous pouvez consulter les définitions de rôle pour voir quels rôles vous devrez donner aux utilisateurs pour qu'ils effectuent certaines tâches. https://docs.mongodb.com/manual/reference/built-in-roles/ Ce n'est pas conseillé de rendre tous vos utilisateurs superbes :)
J'ai eu un problème similaire ici sous 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é qu'après avoir perdu beaucoup de temps, je me connectais en fait sur le service MongoDb de Bitnami. S'il vous plaît, jetez un oeil s'il n'y a pas une autre instance de mongoDB en cours d'exécution sur votre serveur.
Bonne chance!
utiliser mydb
db.createUser ({utilisateur: "test", pwd: "secret", rôles: ["readWrite", "dbAdmin"], passwordDigestor: "serveur"})
C'est une question simple.
utilisez votre BD
montrer aux utilisateurs
db.createUser ({utilisateur: "votreutilisateur", pwd: "mot de passe", rôles: ["readWrite", "dbAdmin"]})
ou
db.grantRolesToUser ('votre_utilisateur', [{rôle: "dbAdmin", db: "votreDB"}])
De plus, notez que si votre client Shell mongo ne parvient pas à se connecter correctement à l'instance mongod
, vous pouvez recevoir de telles erreurs "Permission Denied".
Assurez-vous que votre client ouvre une connexion en vérifiant le port de connexion, mais également que le port que vous utilisez dans mongod
n'est pas utilisé. Vous pouvez définir un autre port à l'aide du paramètre --port <port>
dans le shell et le processus.
J'ai eu ce problème à cause du nom d'hôte dans mon compas MongoDB pointant sur admin à la place de mon projet. Fixé en ajoutant le/nom du projet après le nom de l'hôte :) Essayez ceci:
Utilisez également la même chaîne de connexion dans votre code:
Bonne chance.
Acceptez de vous authentifier auprès de la base de données d'administration et de disposer d'au moins un rôle doté des privilèges appropriés, ce qui éviterait les "exceptions d'hôte local" de la base de données (ceci est réservé aux sites hébergés sur mongoDB), même si tout est toujours en place obtenir des exceptions non autorisées sur presque toutes les commandes, tout en accédant à mongoDB créé à l'aide de Mongo Atlas , voici l'endroit où vous pouvez en connaître la raison, pourquoi :
et vérifiez aussi si vous avez hébergé mongoDB sur mongo Atlas :
J'ai eu le même problème et dans mon cas, il était causé par la variable mongodb_security_authorization qui avait pour valeur "enabled". En gros, j'ai corrigé ce problème en le modifiant:
mongodb_security_authorization: "enabled"
pour que:
mongodb_security_authorization: "disabled"