我有启用了身份验证的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
删除记录,我缺少什么角色?还是启用身份验证后不支持?
答案 0 :(得分:1)
这个答案https://stackoverflow.com/a/20120639/2138959给了我一个提示,root
用户可能没有所需的特权,而实际上只有find
特权。我仍然不知道为什么readWrite@local
不允许写system.replicaset
,但是当我用find
,insert
,remove
添加新角色时, update
资源的bypassDocumentValidation
,useUUID
,local.system.replset
特权我终于可以删除副本集并更新名称。
另一个更简单的选择是为用户分配dbOwner@local
角色。