如何在分片环境中更新MongoDB 3.0中的用户定义角色?

时间:2015-04-18 17:34:26

标签: mongodb mongodb-mms

我使用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服务器尝试了上述命令。

如何存储角色?

P.S:我知道" eval"在3.0中已弃用,但我问的是我无法更新角色的原因。

0 个答案:

没有答案