mongodb - “未授权管理员执行命令”即使使用 root 角色
问题描述
我正在尝试在我的 mongodb 集群的主节点上执行以下“查询”:
> db.system.sessions.count()
集群给我一个错误如下:
“未授权管理员执行命令”,“未经授权”
文档说“root”角色隐含了“clusterAdmin”角色,我认为这足以查询会话数。
这是我登录的用户/角色:
{
"user" : "admshard",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
},
{
"role" : "clusterManager",
"db" : "admin"
},
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "dbOwner",
"db" : "admin"
}
]
}
我的 mongodb 版本是 4.2.3。我正在使用 2 个数据库和 2 个仲裁器。
对此有任何线索吗?
谢谢!!
解决方案
root角色提供角色授予的权限:
- 读写任意数据库
- dbAdminAnyDatabase
- userAdminAnyDatabase
- 集群管理员
- 恢复
- 备份
clusterManager授予对配置数据库中所有非系统集合的查找权限
readWriteAnyDatabase在除 local 和 config 之外的所有数据库上授予与 readWrite 相同的权限,并在整个集群上提供 listDatabases 操作。
您可能需要创建一个自定义角色,并使用grantPivildgesToRole为其提供对 config.system.sessions 集合的查找操作。
推荐阅读
- java - Mockito:“给定......将”返回空值而不是答案
- objective-c - AVAssetExportSession 在尝试合并多个视频/音频剪辑时导致音频视频不同步
- php - 如果某个 API 不允许在 1 个 GET 请求中获取多个位置,那么 foreach 和每个位置发出 1 个 GET 请求是唯一的选择吗?
- xml - 如何使用 ET.parse 函数遍历目录中的每个文件
- entity-framework-core - 在 oData 控制器中检索上下文
- c++ - C 整数在 C++ 代码中使用时失去其常量状态
- php - PHP如何将结果保持为十进制格式并删除不必要的零?
- php - HTML 选择的问题
- firebase-analytics - 如何在 Firebase 分析中获取 screen_view 事件的计数?
- shake-build-system - 我可以“强制”并行执行依赖目标吗?