Mongodb 启用身份验证时,无法从local.system.replset删除文档
我有启用了身份验证的MongoDB副本集。我想更改副本集名称。为此,我必须从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
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
用户角色。同样的问题,本地数据库不允许创建任何自定义角色。但是我们可以在管理数据库中为本地数据库创建角色。