尝试使用db.currentOp时出现“未授权”错误

时间:2014-11-28 15:07:11

标签: mongodb

我想创建一个可以在读取数据之前检查当前操作的用户。我发现执行此操作的方法是使用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()吗?

另外,如果这不是检查并发性的正确方法,它会是什么?

1 个答案:

答案 0 :(得分:1)

inprog的文档说:

  

将此操作应用于cluster资源。

来自:http://docs.mongodb.org/manual/reference/privilege-actions/#authr.inprog

另外,我知道当我分配包含clusterMonitor操作的内置inprog角色时,我必须在admin数据库而不是数据库中执行此操作。将要开展行动。