MongoDB - 集合级角色

时间:2017-11-14 19:28:17

标签: mongodb

我有麻烦。 我正在尝试将角色应用于用户。 我希望用户只查找,插入,删除和更新特定的集合

我这样做。

  1. 创建角色:

    db.createRole({role:' user_role_col',privileges:[{resource:{db:' something_else',collection:' col_something_else'},actions :['发现','删除','插入'更新']}],角色:[]});

  2. 使用该角色创建用户:

    db.createUser({user:' user_col',pwd:' 1234',角色:[{role:" user_role_col",db:&#34 ; something_else"}]})

  3. 当我创建角色用户时,我会留在 something_else 数据库( use something_else

    0错误,但我只能读 col_something_else ,我无法删除,更新或插入:(

    我做错了什么?

1 个答案:

答案 0 :(得分:1)

我相信以下命令可以复制您的所作所为。在这里,我将在test数据库中创建角色和用户:

> use test

> db.createRole({role: 'testRole', privileges: [{resource: {db:'test', collection:'test'}, actions:['find','update','insert','remove']}], roles: []})

> db.createUser({user:'testUser',pwd:'password',roles:[{role:'testRole', db:'test'}]})

然后我必须退出mongo shell并使用新凭据重新进行身份验证。但是,authenticationDatabase参数必须指向test数据库,因为我创建了该角色的位置和用户:

$ mongo -u testUser -p password --authenticationDatabase test

> db.test2.insert({a:1})  //try inserting to a non-"test" collection
unauthorized

> db.test2.find()  //try find on a non-"test" collection
unauthorized

> db.test.insert({a:1})  //insert into "test" collection
Inserted 1 record(s)

> db.test.updateMany({},{$set:{a:2}})  //update "test" collection
{
  "acknowledged": true,
  "matchedCount": 1,
  "modifiedCount": 1
}

> db.test.find()  //find on "test" collection
{
  "_id": ObjectId("5a0bcfa4322032cfcc3a69c6"),
  "a": 2
}

> db.test.deleteOne({a:2})  //delete from "test" collection
{
  "acknowledged": true,
  "deletedCount": 1
}

> db.test.drop()  //try to drop "test" collection
2017-11-15T16:32:07.715+1100 E QUERY    [thread1] Error: drop failed: {
  "ok": 0,
  "errmsg": "not authorized on test to execute command { drop: \"test\" }",
  "code": 13,
  "codeName": "Unauthorized"
}

我发现新的自定义角色(testRole)已正确授权。这是使用MongoDB 3.4.10。