当前位置: 首页 > 知识库问答 >
问题:

启用身份验证时,无法从Local.System.ReplSet中删除文档

满伟彦
2023-03-14

我已将MongoDB副本设置为启用身份验证。我想更改副本集名称。为此,我必须从local.system.replset集合中删除文档。我为admin用户分配了root@admin角色,也为普通用户分配了readwrite@local角色。当我尝试用上面的任何用户从shell中执行remove时,我会得到unauthorization异常:

> 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个答案

邓阳嘉
2023-03-14

这个回答https://stackoverflow.com/a/20120639/2138959提示我,root用户可能没有所需的特权,实际上它只有find特权。我仍然不知道为什么readwrite@local不允许写入system.replicaset,但是当我添加具有findinsertremoveupdatebypassdocumentvalidationuseuuid权限的新角色时,我终于能够删除副本集并更新名称。

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

 类似资料:
  • 我正在使用SpringBoot设计一个REST API。同时,我正在构建一个使用该API的SPA。 为了安全起见,我选择了易于设置的Basic Auth。我现在面临的是401挑战问题。当我的SPA向API发出请求时,如果验证失败,浏览器会显示我想要删除的经典登录弹出窗口。 我到处读到,当401响应还包含一个值为“Basic”的WWW authenticate标头时,浏览器会显示这个弹出窗口。 所以

  • 当我试图从Django的内置auth应用程序中删除用户时,出现以下错误: 我在网上搜索,我发现了这个问题:Django-没有这样的表:main.auth_user__old所以我更新了Django,我现在使用的是3.2.4版本(我使用的是sqlite)。然后我试图从数据库中删除auth表,但是当我执行一个时,它告诉我没有检测到任何更改。另外,我不能删除整个数据库。 有人知道我能做些什么来解决这个问

  • 使用,在云模式下,使用3个外部作为集群,并使用作为客户端。 在启用之前,我使用以下代码添加/更新文档: 它工作良好,新的文档立即在搜索结果。 然后我启用了和(如果重要的话,还启用了)。 为了设置凭据信息,代码重构如下: curl-k--用户solr:password“https://localhost:8983/solr/corexxxx/update?wt=json&indent=true&co

  • 我正在尝试配置laravel的auth以适合我的db。但无论我做什么,都会覆盖像或在LoginController中,它忽略所有内容。有人知道如何用不同的数据库参数化laravel的身份吗? 以下是我在LoginController中更改的内容: 在用户模型中: 编辑:config/auth.php: ]; LoginController: 名称空间App\Http\Controllers\Aut

  • 我在Ubuntu上安装了自己的Jitsi实例,遵循使用官方软件包的文档。这很有魅力。但我不想有一个完全开放的实例,所以我遵循了https://github.com/jitsi/jicofo#secure-域需要登录才能创建会议。 据我所知,我完全遵循了文档,但在重新启动Jitsi后,我无法再创建会议。我看到以下行为: 私人网址:我得到一个消息,会议还没有开始,还有一个“我是主持人”按钮。如果我按下

  • 我正在使用Android Spring 1.0。1.(此处为API文档) 我有GET和POST(添加对象)事务与基本身份验证工作,但我如何做删除? 获取和发布看起来像这样: