mongodb - 尝试使用 db.currentOp 时出现 "unauthorized"错误

标签 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"}])

但是,当我对用户 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/

相关文章:

php - PHP MongoDB 驱动程序的游标如何缓冲结果集?

django - Django 和 Postgres 违反外键约束

java - 如何使用java从Json文件导入数据到Mongodb

mongodb - 使用投影过滤嵌套数组而不使用展开

mongodb - 在 MongoDB 聚合中合并数组字段

MongoDB 管道聚合将值加在一起

node.js - Cloud Foundry MongoDB 错误 ECONNREFUSED

mongodb - mongo 和 mongodump 与 auth 一起工作,但 restore 不

mongodb - 添加新角色 JHipster 和 MongoDb

node.js - MongoDB-Memory-Server 使 jest 测试调试卡在 WSL 上