我想创建一个可以在读取数据之前检查当前操作的用户。我发现执行此操作的方法是使用db.currentOp(),这需要权限才能执行“inprog”操作。
我创建了testRole
角色来实现这个目标
db.createRole({
role: "testRole",
privileges: [{
resource: {
db: "grtd",
collection: ""
},
actions: ["inprog"]
}],
roles: []
})
并将其授予用户grtdroot:
db.grantRolesToUser("grtdroot", "roles": [ {"role": "testRole", "db":"grtd"}])
但是当我将db.currentOp()
与用户grtdroot一起使用时,我总是得到{ "err" : "unauthorized" }
。我已确认角色设置正确:
> db.getRoles({showPrivileges: true})
[
{
"role" : "testRole",
"db" : "grtd",
"isBuiltin" : false,
"roles" : [ ],
"inheritedRoles" : [ ],
"privileges" : [
{
"resource" : {
"db" : "grtd",
"collection" : ""
},
"actions" : [
"inprog"
]
}
],
"inheritedPrivileges" : [
{
"resource" : {
"db" : "grtd",
"collection" : ""
},
"actions" : [
"inprog"
]
}
]
}
]
我错过了什么吗?不能在用户建立的数据库上使用db.currentOp()吗?
另外,如果这不是检查并发性的正确方法,它会是什么?
答案 0 :(得分:1)
inprog
的文档说:
将此操作应用于
cluster
资源。
来自:http://docs.mongodb.org/manual/reference/privilege-actions/#authr.inprog
另外,我知道当我分配包含clusterMonitor
操作的内置inprog
角色时,我必须在admin
数据库而不是数据库中执行此操作。将要开展行动。