You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB root角色查询db.system.sessions.count()提示无权限如何解决

报错原因
  • 查询对象错误:MongoDB默认将会话信息存储在config库的system.sessions集合中,若当前处于admin库下执行db.system.sessions.count(),实际是尝试查询admin.system.sessions集合,你当前配置的角色没有该集合的查询权限,就会触发对应报错。
  • 版本权限继承缺陷:MongoDB 4.2版本的内置root角色权限继承存在小概率异常,查询全局会话列表需要的viewAllSessions集群权限未被正常继承,导致权限校验不通过。
  • 认证上下文异常:登录时未指定正确的认证库,虽然你的用户属于admin库,但如果登录时没有加--authenticationDatabase admin参数,会默认使用当前连接的库进行认证,导致角色权限未生效。
  • 分片集群访问方式错误:如果你是直接连接分片集群的单个分片主节点执行命令,而非通过mongos路由节点访问,分片节点的本地权限校验会拦截集群级别的会话查询请求,即使配置了全局角色也会报错。
排查解决思路
  • 优先修正查询语句,指定查询config库的会话集合,执行命令:
    use config; db.system.sessions.count()
    
    也可以直接执行跨库查询命令:
    db.getSiblingDB('config').system.sessions.count()
    
    验证修正后是否还会报错。
  • 检查当前登录的认证上下文,执行命令:
    db.runCommand({connectionStatus:1})
    
    查看返回结果中authInfo.authenticatedUsers字段,确认用户信息和所属角色已经正确加载。
  • 如果确认是权限缺失问题,可手动给用户授予viewAllSessions权限:
    use admin
    db.grantPrivilegesToUser("admshard", [
      { resource: { cluster: true }, actions: [ "viewAllSessions" ] }
    ])
    
    也可以直接授予包含该权限的clusterMonitor内置角色:
    use admin
    db.grantRolesToUser("admshard", [{role: "clusterMonitor", db: "admin"}])
    
  • 分片集群场景下不要直接连接单个分片节点执行集群级查询,改为通过mongos路由节点执行对应操作。
  • 如果你确实需要查询admin库下的system.sessions集合(非常规场景),可以单独授予该集合的查询权限:
    use admin
    db.grantPrivilegesToUser("admshard", [
      { resource: { db: "admin", collection: "system.sessions" }, actions: [ "find" ] }
    ])
    

内容的提问来源于stack exchange,提问作者no-stale-reads

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 21:39:02