我想创建一个用户,可以在读取数据之前检查当前操作。我发现执行此操作的方法是使用 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"}])
但是,当我对用户 grtdroot 使用 db.currentOp()
时,我总是得到 { "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() 不能用于用户创建的数据库吗?
此外,如果这不是检查并发性的正确方法,那会是什么?
最佳答案
inprog
的文档说:
Apply this action to the
cluster
resource.
来自:http://docs.mongodb.org/manual/reference/privilege-actions/#authr.inprog
此外,我知道何时分配内置 clusterMonitor
角色,其中包含 inprog
行动,我必须在admin
上进行数据库而不是要进行操作的数据库。
关于mongodb - 尝试使用 db.currentOp 时出现 "unauthorized"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27191435/