MongoDB能否创建可读取所有非管理员数据库的普通用户?
这个结论并不正确,MongoDB原生支持为用户分配覆盖未来新增数据库的权限,有两种常用的实现方案:
方案1:全局数据库权限(全库匹配)
如果你需要给普通用户开放所有数据库(包括后续新建的数据库)的读写权限,直接用MongoDB内置的全局角色即可,操作需要在admin库下执行:
// 先用管理员账号登录后切换到admin库 use admin // 创建带全局读写权限的普通用户 db.createUser({ user: "dev_user", pwd: "your_password_here", roles: [ // 全局读权限:所有库可读,包括后续新增 // { role: "readAnyDatabase", db: "admin" }, // 全局读写权限:所有库可读写,包括后续新增 { role: "readWriteAnyDatabase", db: "admin" } ] })
这类全局角色默认不会覆盖local、config这两个系统内置数据库,如果你需要访问这两个库可以单独补充对应权限。
方案2:通配符匹配权限(仅匹配指定规则的库)
如果你不想开放全库权限,只需要给命名符合特定规则的未来新增数据库开放权限(比如你课程相关的数据库都会用mean_course_作为前缀),可以用MongoDB 4.2及以上版本支持的通配符数据库匹配功能:
use admin db.createUser({ user: "course_dev", pwd: "your_password_here", roles: [ { role: "readWrite", // 匹配所有以mean_course_开头的数据库,包括后续新建的 db: "mean_course_*", wildcardCollectionOptions: { wildcardCollections: true } } ] })
注意事项
- 所有覆盖多库的权限都需要在
admin数据库下创建用户并分配,在普通业务库下创建的用户只能绑定当前库的权限 - 本地开发环境使用全局权限足够方便,如果是生产环境建议按需分配最小权限,避免权限溢出风险
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

