Невозможно удалить документ из local.system.replset при включенной аутентификации - PullRequest
0 голосов
/ 18 февраля 2020

У меня установлена ​​реплика MongoDB с включенной аутентификацией. Я хочу изменить имя набора реплик. Для этого мне нужно удалить документы из коллекции local.system.replset. У меня есть администратор с ролью root@admin, также у меня есть обычный пользователь с ролью readWrite@local. Когда я пытаюсь выполнить remove из оболочки с любым из вышеперечисленных пользователей, я получаю исключение Unauthorized:

> db.system.replset.remove({})
WriteCommandError({
        "operationTime" : Timestamp(1582026365, 1),
        "ok" : 0,
        "errmsg" : "not authorized on local to execute command { delete: \"system.replset\", ordered: true, lsid: { id: UUID(\"43182bad-b13d-4ff4-a31b-3cdcb1dd49fa\") }, $clusterTime: { clusterTime: Timestamp(1582026355, 1), signature: { hash: BinData(0, E9FD8A23702CE215B193423CAF1C2AF3FEE83D6B), keyId: 6794747247067136002 } }, $db: \"local\" }",
        "code" : 13,
        "codeName" : "Unauthorized",
        "$clusterTime" : {
                "clusterTime" : Timestamp(1582026365, 1),
                "signature" : {
                        "hash" : BinData(0,"CyCvFtgLkpdhIrsJV67KBlVwL+U="),
                        "keyId" : NumberLong("6794747247067136002")
                }
        }
})

Если я пытаюсь выполнить ту же команду на наборе реплик без аутентификации, я могу успешно удалить запись. Какую роль мне не хватает, чтобы позволить пользователю удалить запись из local.system.replset? Или это не поддерживается при включенной аутентификации?

1 Ответ

1 голос
/ 18 февраля 2020

Этот ответ { ссылка } дал мне подсказку, что root пользователь может не иметь требуемых привилегий, и действительно, он имеет только find привилегию. Я до сих пор не знаю, почему readWrite@local не разрешил писать в system.replicaset, но когда я добавил новую роль с find, insert, remove, update, bypassDocumentValidation, useUUID привилегии для ресурса local.system.replset Мне удалось наконец удалить набор реплик и обновить имя.

Еще один более простой вариант - назначить пользователю роль dbOwner@local.

...