Mongodb 获得;“未经授权”;尝试使用db.currentOp时出错

Mongodb 获得;“未经授权”;尝试使用db.currentOp时出错,mongodb,Mongodb,我想创建一个可以在读取数据之前检查当前操作的用户。我发现这样做的方法是使用db.currentOp(),它需要权限来执行“inprog”操作 我创建了testRole角色来实现这一点 db.createRole({ role: "testRole", privileges: [{ resource: { db: "grtd", collection: "" }, actions: ["

我想创建一个可以在读取数据之前检查当前操作的用户。我发现这样做的方法是使用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的文档说:

将此操作应用于
群集
资源

发件人:


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

您在哪里管理用户/角色?在管理数据库中还是在本地(您的情况是grtd)?我在本地管理角色。db始终是“grtd”