启用身份验证后无法从 local.system.replset 中删除文档
Cannot delete document from local.system.replset when authentication enabled
我有 MongoDB 个启用了身份验证的副本集。我想更改副本集名称。为此,我必须从 local.system.replset
集合中删除文档。我有分配了 root@admin
角色的管理员用户,也有分配了 readWrite@local
角色的普通用户。当我尝试使用上述任何用户从 shell 执行 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
中删除记录,我缺少什么角色?还是开启认证后不支持?
这个答案 给了我一个提示,即 root
用户可能没有所需的权限,实际上它只有 find
权限。我仍然不知道为什么 readWrite@local
不允许写入 system.replicaset
,但是当我使用 find
、insert
、remove
添加新角色时, update
、bypassDocumentValidation
、useUUID
local.system.replset
资源的权限我终于能够删除副本集并更新名称。
另一个更简单的选项是将 dbOwner@local
角色分配给用户。
我有 MongoDB 个启用了身份验证的副本集。我想更改副本集名称。为此,我必须从 local.system.replset
集合中删除文档。我有分配了 root@admin
角色的管理员用户,也有分配了 readWrite@local
角色的普通用户。当我尝试使用上述任何用户从 shell 执行 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
中删除记录,我缺少什么角色?还是开启认证后不支持?
这个答案 给了我一个提示,即 root
用户可能没有所需的权限,实际上它只有 find
权限。我仍然不知道为什么 readWrite@local
不允许写入 system.replicaset
,但是当我使用 find
、insert
、remove
添加新角色时, update
、bypassDocumentValidation
、useUUID
local.system.replset
资源的权限我终于能够删除副本集并更新名称。
另一个更简单的选项是将 dbOwner@local
角色分配给用户。