web-dev-qa-db-fra.com

Comment configurer un utilisateur qui n'a pas accès à la base de données `admin` mais l'utilise comme base de données d'authentification?

Je veux configurer un utilisateur dans MongoDB. Cet utilisateur n'aura pas accès à la base de données d'administration. Mais il utilise admin comme base de données d'authentification. Il ne parviendra pas à connecter le mongoDB par cette commande mongo --Host localhost admin. Au lieu de cela, il peut utiliser cette commande pour se connecter à la base de données test: mongo --Host localhost --authenticationDatabases admin test. Comment puis-je restreindre l'autorisation dans ce cas?

J'ai essayé la commande ci-dessous pour créer un utilisateur:

db.createUser({user: 'testUser', pwd: '123456', roles: [{role:'readWrite', db: 'SampleCollections'}]})

lorsque j'utilise ce compte utilisateur pour me connecter à mongo Shell, je peux lister les collections sous la base de données admin. Comment puis-je restreindre l'utilisateur uniquement sur la base de données SampleCollections et non admin?

3
Joey Yi Zhao

Pas besoin. Vous donnez simplement aux utilisateurs les droits nécessaires sur la base de données non administrative souhaitée. L'utilisateur peut utiliser la base de données admin comme base de données d'authentification même si l'utilisateur n'a pas accès en lecture/écriture à la base de données admin.

use products
db.grantRolesToUser("productsUser",[ "readWrite" ])

grantRolesToUser documentation.

[~ # ~] mise à jour [~ # ~]

Créons une instance de mongodb avec --auth. Connectez-vous en tant qu'administrateur, créez un utilisateur qui peut lire, écrivez UNIQUEMENT test -db, authentifiez-vous avec cet utilisateur, vérifiez que vous pouvez utiliser la liste des collections de bases de données d'administration et ce que cet utilisateur peut faire avec la base de données de test.

#> mlaunch init --single --auth
launching: mongod on port 27017
Username "user", password "password"
#> mongo -u user -p password admin
MongoDB Shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017/admin
MongoDB server version: 3.4.6
Mongo> db.createUser({user:"test", pwd:"testpwd", roles:[{role:"readWrite", db:"test"}]})
Successfully added user: {
    "user" : "test",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "test"
        }
    ]
}
Mongo> db.auth("test","testpwd")
1
Mongo> db
admin
Mongo> show collections
2017-09-11T19:06:22.001+0300 E QUERY    [thread1] Error: listCollections failed: {
    "ok" : 0,
    "errmsg" : "not authorized on admin to execute command { listCollections: 1.0, filter: {} }",
    "code" : 13,
    "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/Shell/utils.js:25:13
DB.prototype._getCollectionInfosCommand@src/mongo/Shell/db.js:807:1
DB.prototype.getCollectionInfos@src/mongo/Shell/db.js:819:19
DB.prototype.getCollectionNames@src/mongo/Shell/db.js:830:16
shellHelper.show@src/mongo/Shell/utils.js:762:9
shellHelper@src/mongo/Shell/utils.js:659:15
@(shellhelp2):1:1
Mongo> use test
switched to db test
Mongo> db.coll.insert({})
WriteResult({ "nInserted" : 1 })
Mongo> show collections
coll
Mongo>  

Et même de l'extérieur:

#> mongo -u test -p testpwd --authenticationDatabase test
MongoDB Shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.6
2017-09-11T19:17:48.614+0300 E QUERY    [thread1] Error: Authentication failed. :
DB.prototype._authOrThrow@src/mongo/Shell/db.js:1461:20
@(auth):6:1
@(auth):1:2
exception: login failed
#> mongo -u test -p testpwd --authenticationDatabase admin test
MongoDB Shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017/test
MongoDB server version: 3.4.6
Mongo> 
1
JJussi

@Zhao Yi, que cherchez-vous? J'espère que vous découvrirez votre solution Ici

Par exemple, je joins un exemple comme indiqué ci-dessous

enter image description here

L'explication du code est:

  1. La première étape consiste à spécifier les username et password qui doivent être créés.
  2. La deuxième étape consiste à attribuer un rôle à l'utilisateur qui, dans ce cas, puisqu'il doit s'agir d'un administrateur de base de données, est affecté au rôle userAdmin. Ce rôle permet à l'utilisateur d'avoir des privilèges administratifs uniquement sur la base de données spécifiée dans l'option db.
  3. Le paramètre db spécifie la base de données sur laquelle l'utilisateur doit disposer de privilèges administratifs.

Remarque: La sortie montre qu'un utilisateur appelé Employeeadmin a été créé et cet utilisateur ne dispose de privilèges que sur la base de données Employé .

1
Md Haidar Ali Khan