我有麻烦。 我正在尝试将角色应用于用户。 我希望用户只查找,插入,删除和更新特定的集合
我这样做。
创建角色:
db.createRole({role:' user_role_col',privileges:[{resource:{db:' something_else',collection:' col_something_else'},actions :['发现','删除','插入'更新']}],角色:[]});
使用该角色创建用户:
db.createUser({user:' user_col',pwd:' 1234',角色:[{role:" user_role_col",db:&#34 ; something_else"}]})
当我创建角色和用户时,我会留在 something_else 数据库( use something_else )
0错误,但我只能读 col_something_else ,我无法删除,更新或插入:(
我做错了什么?
答案 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。