clusterAdmin是MongoDB最高级别集群管理权限,仅在admin数据库中有效,可执行复制集重配、分片增减、dropDatabase等高危操作,但无任何数据库读写能力。

clusterAdmin 角色只能在 admin 数据库中创建用户时指定
直接在非 admin 数据库下执行 db.createUser() 并尝试赋予 clusterAdmin,MongoDB 会静默忽略该角色或报错:RoleNotFound: role clusterAdmin@your_db not found。因为 clusterAdmin 是集群级内置角色,仅在 admin 数据库上下文中有效。
必须先切换到 admin 数据库,再创建用户并显式绑定 db: "admin":
use admin
db.createUser({
user: "clustermgr",
pwd: "strongPass123",
roles: [{ role: "clusterAdmin", db: "admin" }]
})
-
clusterAdmin自动包含clusterManager、clusterMonitor、hostManager等子能力,无需额外叠加 - 如果只给
{ role: "clusterAdmin" }(漏掉db: "admin"),实际等效于{ role: "clusterAdmin", db: "admin" }—— MongoDB 会自动补全,但显式写出更可靠 - 该用户后续可通过
mongos或任意mongod节点连接,权限全局生效
clusterAdmin 用户无法直接操作分片数据节点上的集合
拥有 clusterAdmin 权限 ≠ 拥有业务数据库的读写权。它只允许执行集群管理命令,比如:
-
sh.status()、sh.addShard()、sh.removeShard() -
rs.stepDown()(在副本集主节点上)、db.printShardingStatus() - 查看
config数据库中的分片元数据(如config.shards)
但尝试执行 use myapp; db.users.insertOne({...}) 会失败,报错:not authorized on myapp to execute command { insert: "users", ... }。这是因为 clusterAdmin 不附带任何业务库的 readWrite 权限。
若需兼顾管理与数据操作,必须额外授予业务角色:
use admin
db.grantRolesToUser("clustermgr", [
{ role: "readWrite", db: "myapp" },
{ role: "read", db: "reporting" }
])
分片集群中 clusterAdmin 权限依赖 mongos 路由层认证
在分片集群里,clusterAdmin 用户必须通过 mongos 实例连接才能使用全部功能。直接连某个 shard 或 config 节点会受限:
- 连
mongos:可执行所有分片管理命令,也能跨库操作(配合已授业务角色) - 连
shard节点:仅能执行该副本集范围内的管理命令(如rs.conf()),sh.命令不可用 - 连
config节点:可查config.*集合,但无法触发分片逻辑(如均衡、迁移)
连接方式必须指定 --authenticationDatabase admin:
mongosh --host mongos-host:27017 -u clustermgr -p strongPass123 --authenticationDatabase admin
clusterAdmin 和 root 的关键区别:最小权限原则适用场景
root 是超级角色,覆盖 clusterAdmin + 所有数据库的 readWriteAnyDatabase + userAdminAnyDatabase 等。但生产环境应避免直接用 root 执行日常运维。
-
clusterAdmin更适合专职 DBA 或运维平台账号:能调分片、看状态、踢节点,但不能误删业务数据 - 如果用户还需创建其他用户,需额外加
userAdminAnyDatabase,而非直接升为root - 配置文件中启用
security.authorization: enabled后,clusterAdmin用户仍需通过mongos认证,且其权限不会自动同步到未开启 auth 的节点(所有节点必须统一开启授权)
最容易被忽略的一点:分片集群中,clusterAdmin 用户的凭证只存于 config 服务器的 admin.system.users 中,不复制到各 shard;它的权限是路由层解析并下发的,不是靠每个分片本地校验。

















