Как обновить определяемые пользователем роли в MongoDB 3.0 в среде шардинга?
Я использую MMS для управления типичным кластером сегментирования с помощью всего одного сегмента (на данный момент): 3 mongod для shard000 (2 сервера + 1 арбитр) + 1 сервер конфигурации + 2 экземпляра mongos.
Аут включен и работает хорошо. Я добавил определенную пользователем роль в консоли администратора MMS и вижу ее в оболочке mongo.
db.system.roles.findOne()
{
"_id" : "admin.myrole",
"role" : "myrole",
"db" : "admin",
"privileges" : [
{
"resource" : {
"db" : "",
"collection" : ""
},
"actions" : [
"changeCustomData",
"changePassword",
...
Я хочу изменить его на AnyAction на AnyResource (как требует действие 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",
...
и я не знаю, "кто" восстанавливает это. Я попробовал вышеупомянутые команды от ПЕРВИЧНОГО и от сервера CONFIG в базе данных администратора.
Как я могу сохранить роль?
PS: я знаю, что eval устарел в 3.0, но я спрашиваю, почему я не могу обновить роль.