Vous devriez avoir démarré l'instance mongod avec le contrôle d'accès, c'est-à-dire l'option de ligne de commande --auth, telle que :
$ mongod --auth
Démarrons le shell mongo et créons un administrateur dans la base de données d'administration :
$ mongo
> use admin
> db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
Maintenant, si vous exécutez la commande "db.stats()", ou "show users", vous obtiendrez l'erreur "non autorisé par l'administrateur à exécuter la commande..."
> db.stats()
{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { dbstats: 1.0, scale: undefined }",
"code" : 13,
"codeName" : "Unauthorized"
}
La raison en est que vous n'avez toujours pas accordé le rôle "read" ou "readWrite" à l'utilisateur myUserAdmin. Vous pouvez le faire comme ci-dessous :
> db.auth("myUserAdmin", "abc123")
> db.grantRolesToUser("myUserAdmin", [ { role: "read", db: "admin" } ])
Vous pouvez maintenant le vérifier (la commande "afficher les utilisateurs" fonctionne désormais) :
> show users
{
"_id" : "admin.myUserAdmin",
"user" : "myUserAdmin",
"db" : "admin",
"roles" : [
{
"role" : "read",
"db" : "admin"
},
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
Maintenant, si vous lancez "db.stats()", tout ira bien :
> db.stats()
{
"db" : "admin",
"collections" : 2,
"views" : 0,
"objects" : 3,
"avgObjSize" : 151,
"dataSize" : 453,
"storageSize" : 65536,
"numExtents" : 0,
"indexes" : 3,
"indexSize" : 81920,
"ok" : 1
}
Ce mécanisme d'utilisateur et de rôle peut également être appliqué à toutes les autres bases de données de MongoDB, en plus de la base de données d'administration.
(MongoDB version 3.4.3)