启用身份验证后无法从local.system.replset中删除文档

时间:2020-02-18 11:55:45

标签: mongodb replicaset

我有启用了身份验证的MongoDB副本集。我想更改副本集名称。为此,我必须从std::visit集合中删除文档。我分配了auto v1 = magic_switch<abc_enum, abc_enum::COUNT, AsVariant<abc_enum, std::size_t(abc_enum::COUNT)>::F>{}(abc_enum::b); auto v2 = magic_switch<defg_enum, defg_enum::COUNT, AsVariant<defg_enum, std::size_t(defg_enum::COUNT)>::F>{}(defg_enum::f); std::visit([](auto e1, auto e2){ return stuff<e1(), e2()>{}(); }, v1, v2); 角色的管理员用户,也拥有local.system.replset角色的普通用户。当我尝试与上述任何用户一起从外壳执行root@admin时,出现readWrite@local异常:

remove

如果我尝试在未启用身份验证的副本集上执行相同的命令,则可以成功删除记录。为了让用户从Unauthorized删除记录,我缺少什么角色?还是启用身份验证后不支持?

1 个答案:

答案 0 :(得分:1)

这个答案https://stackoverflow.com/a/20120639/2138959给了我一个提示,root用户可能没有所需的特权,而实际上只有find特权。我仍然不知道为什么readWrite@local不允许写system.replicaset,但是当我用findinsertremove添加新角色时, update资源的bypassDocumentValidationuseUUIDlocal.system.replset特权我终于可以删除副本集并更新名称。

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