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

如何创建仅读指定库且有clusterMonitor权限但无全库可见权限的MongoDB用户

解决MongoDB用户能查看所有数据库的权限问题

问题出在你使用的clusterMonitor内置角色自带listDatabases权限,这个权限允许用户列出集群里的所有数据库,这就是用户能看到全部数据库的原因。

要实现「仅读取指定数据库+查看集群性能」的需求,需要自定义一个集群监控角色,移除listDatabases权限,再结合目标数据库的只读权限:

  1. 创建自定义集群监控角色
    在admin数据库中创建仅保留性能查看必要权限的角色,避免授予列出所有数据库的权限:

    use admin
    db.createRole(
      {
        role: "customClusterMonitor",
        privileges: [
          // 集群级性能监控核心权限
          { resource: { cluster: true }, actions: ["serverStatus", "replSetGetStatus", "getDiagnosticData"] },
          // 目标数据库的统计/索引查看权限(支持Compass性能面板)
          { resource: { db: "MyDatabase", collection: "" }, actions: ["dbStats", "collStats", "listIndexes", "listCollections"] },
          // 可选:允许查看系统性能日志
          { resource: { db: "admin", collection: "system.profile" }, actions: ["find"] }
        ],
        roles: []
      }
    )
    

    这些权限足够支撑MongoDB Compass查看集群性能指标(服务器状态、副本集状态、数据库/集合统计等),同时不会让用户看到所有数据库列表。

  2. 创建目标用户
    用自定义角色替换原有的clusterMonitor,再搭配MyDatabase的只读权限:

    use admin
    db.createUser(
      {
        user: 'username',
        pwd: '***',
        roles: [
            { role: "customClusterMonitor", db: "admin" },
            { role: "read", db: "MyDatabase"}
          ]
      }
    )
    

配置完成后,用该用户登录MongoDB Compass时,只能看到MyDatabase,同时可以正常访问集群性能相关面板。

内容的提问来源于stack exchange,提问作者tpadev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:03:29