Mongodb 启用身份验证时,无法从local.system.replset删除文档

Mongodb 启用身份验证时,无法从local.system.replset删除文档,mongodb,replicaset,Mongodb,Replicaset,我有启用了身份验证的MongoDB副本集。我想更改副本集名称。为此,我必须从local.system.replsetcollection中删除文档。我有root@admin已分配角色,而且我有readWrite@local角色。当我尝试与上述任何用户一起从shell中执行删除时,我会得到未经授权的异常: > db.system.replset.remove({}) WriteCommandError({ "operationTime" : Timestamp(1582026

我有启用了身份验证的MongoDB副本集。我想更改副本集名称。为此,我必须从
local.system.replset
collection中删除文档。我有
root@admin
已分配角色,而且我有
readWrite@local
角色。当我尝试与上述任何用户一起从shell中执行
删除
时,我会得到
未经授权的
异常:

> 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
中删除记录,我缺少了什么角色?或者在启用身份验证时不支持它?

这个答案给了我一个提示,
root
用户可能没有所需的权限,实际上它只有
find
权限。我还是不知道为什么
readWrite@local
不允许写入
system.replicaset
,但当我使用
find
insert
remove
update
绕过DocumentValidation
,添加新角色时,
useUUID
local.system.replsetresource的特权我终于能够删除副本集并更新名称


另一个更简单的选项是分配
dbOwner@local
用户角色。

同样的问题,本地数据库不允许创建任何自定义角色。但是我们可以在管理数据库中为本地数据库创建角色。