0

我正在使用 MMS 来管理一个只有一个分片的典型分片集群(目前):3 个 mongod 用于 shard000(2 个服务器 + 1 个仲裁器)+ 1 个配置服务器 + 2 个 mongos 实例。

身份验证已启用并且运行良好。我在 MMS 管理控制台中添加了一个用户定义的角色,我可以在 mongo shell 中看到它。

db.system.roles.findOne()
{
    "_id" : "admin.myrole",
    "role" : "myrole",
    "db" : "admin",
    "privileges" : [
        {
            "resource" : {
                "db" : "",
                "collection" : ""
            },
            "actions" : [
                "changeCustomData",
                "changePassword",
 ...

我想将其更改为 AnyResource 上的 AnyAction(如doEval操作所要求的那样)。所以,我正在尝试执行此操作:

db.runCommand({ "updateRole": "myrole", "privileges": [  { resource: { anyResource: true}, actions: [ "anyAction" ] } ] }); db.system.roles.findOne()`
and for one second, I get the result I want:
{
    "_id" : "admin.myrole",
    "role" : "myrole",
    "db" : "admin",
    "privileges" : [
        {
            "resource" : {
                "anyResource" : true
            },
            "actions" : [
                "anyAction"
            ]
        }
    ],
    "roles" : [ ]
}

但是,大约两秒钟后:角色恢复了:

configsvr> db.system.roles.findOne()
{
    "_id" : "admin.myrole",
    "role" : "myrole",
    "db" : "admin",
    "privileges" : [
        {
            "resource" : {
                "db" : "",
                "collection" : ""
            },
            "actions" : [
                "changeCustomData",
                "changePassword",

...

我不知道“谁”在恢复它。我已经从 PRIMARY 和 admin 数据库中的 CONFIG 服务器尝试了上述命令。

如何获取存储的角色?

PS:我知道“eval”在 3.0 中已被弃用,但我要问的是我无法更新角色的原因。

4

0 回答 0