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