dbadmin角色不包含useradmin权限,仅负责当前数据库的schema和统计类操作(如索引管理、db.stats),无任何用户管理能力(不能createuser、dropuser等),与useradmin正交;真正管理用户的最小内置角色是useradmin(本库)或useradminanydatabase(admin库)。

dbAdmin角色不包含userAdmin权限,这是设计使然
dbAdmin角色只负责数据库结构层面的管理,比如创建/删除索引、运行 db.stats()、读取 system.profile,但它**完全不涉及用户或角色的增删改查**。它甚至不能执行 db.getUser() 或 db.getUsers() —— 这些命令会直接报错 not authorized on admin to execute command { usersInfo: 1 }。
常见错误现象:以为dbAdmin能建用户,结果失败
你在 test 库执行了:
use test
db.createUser({ user: "dev", pwd: "123", roles: ["dbAdmin"] })
然后切换到 admin 库尝试 db.createUser(...),却收到 not authorized on admin to execute command { createUser: 1 }。这不是配置问题,而是 dbAdmin 根本没被赋予任何与用户管理相关的操作权限(createUser、dropUser、updateUser 等)。
关键点:
-
dbAdmin的权限范围仅限于当前数据库的 schema 和统计类操作,不跨库也不涉用户系统 - 即使你在
admin库授予某用户dbAdmin角色,该角色仍只作用于admin库本身,且依然不含用户管理能力 - 真正能管理用户的最小内置角色是
userAdmin(本库)或userAdminAnyDatabase(所有库)
dbOwner 和 userAdmin 的权限差异必须分清
dbOwner 是 readWrite + dbAdmin + userAdmin 的组合,所以它能建用户;但很多人误以为只要带 Admin 就能管用户,其实 dbAdmin 和 userAdmin 是正交的两个权限维度。
如果你只需要让某人「能建索引+看慢查询+但不能碰用户」,就用 dbAdmin;如果需要「能建用户但不能删集合」,就单独给 userAdmin;两者都给才等价于 dbOwner。
容易被忽略的是:userAdmin 在非 admin 库中创建的用户,只对该库生效;而 userAdminAnyDatabase 必须在 admin 库中创建,否则角色无效。











