如何创建仅读指定库且有clusterMonitor权限但无全库可见权限的MongoDB用户
解决MongoDB用户能查看所有数据库的权限问题
问题出在你使用的clusterMonitor内置角色自带listDatabases权限,这个权限允许用户列出集群里的所有数据库,这就是用户能看到全部数据库的原因。
要实现「仅读取指定数据库+查看集群性能」的需求,需要自定义一个集群监控角色,移除listDatabases权限,再结合目标数据库的只读权限:
创建自定义集群监控角色
在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查看集群性能指标(服务器状态、副本集状态、数据库/集合统计等),同时不会让用户看到所有数据库列表。
创建目标用户
用自定义角色替换原有的clusterMonitor,再搭配MyDatabase的只读权限:use admin db.createUser( { user: 'username', pwd: '***', roles: [ { role: "customClusterMonitor", db: "admin" }, { role: "read", db: "MyDatabase"} ] } )
配置完成后,用该用户登录MongoDB Compass时,只能看到MyDatabase,同时可以正常访问集群性能相关面板。
内容的提问来源于stack exchange,提问作者tpadev
相关产品推荐
相关产品推荐

