我使用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中已弃用,但我问的是我无法更新角色的原因。