首页/数据/NoSQL 速查/创建数据库用户与内置角色
MongoDB99 条

创建数据库用户与内置角色

db.createUser 创建账号并用 roles 授权;常用内置角色 read、readWrite、dbAdmin、userAdmin、clusterMonitor,跨库角色用 {role, db} 形式声明。

NoSQL 速查数据更新于 2026-10-13

createUser 是什么

db.createUser 在指定库下创建账号并绑定角色:roles 数组里既可用内置角色(read、readWrite、dbAdmin、userAdmin、clusterMonitor 等),也可组合跨库角色。账号的认证库就是创建它的那个库,因此连接时要用 authSource 指明。启用访问控制需要配置 security.authorization: enabled 并重启实例。

基本信息

方法db.createUser({ user, pwd, roles })
常用角色read / readWrite / dbAdmin / userAdmin / clusterMonitor / root
认证库账号所在库即认证库,连接用 authSource 指定
跨库授权roles 里用 { role: "read", db: "other" } 形式
管理位置管理层账号建议建在 admin 库集中管理
生效条件security.authorization: enabled,需重启进程

典型使用场景

  • 给业务应用创建最小权限账号,单库只读或读写
  • 给监控系统建 clusterMonitor 只读账号采集指标
  • 给数据分析同学建只读账号做临时查询
  • 多业务共用实例时按库隔离账号,降低影响面
  • 备份工具使用 backup / restore 角色的专用账号
  • 建临时巡检账号,任务结束后立即 drop

创建与维护账号

创建与维护账号
use admin
db.createUser({
  user: "app_rw",
  pwd: passwordPrompt(),                                  # 交互输入,避免明文进历史
  roles: [{ role: "readWrite", db: "app" }]
})

db.createUser({ user: "monitor", pwd: passwordPrompt(), roles: [{ role: "clusterMonitor", db: "admin" }] })
db.getUser("app_rw", { showPrivileges: true })             # 核对实际权限
db.updateUser("app_rw", { roles: [{ role: "readWrite", db: "app" }, { role: "read", db: "report" }] })
db.dropUser("app_rw")                                      # 删除账号

常用内置角色

角色范围说明
read指定库只读查询
readWrite指定库读写文档
dbAdmin指定库库级管理:索引与统计
userAdmin指定库库内账号管理
clusterMonitor集群只读监控指标
root全局超级权限,生产慎用
账号的认证库是创建它的库:建在业务库里的账号连接时必须带 authSource=业务库,否则只会报认证失败。
开启 authorization 之前先确认管理员账号可用,并在另一个窗口验证登录成功再重启,否则可能把自己锁在库外。
密码不要写进脚本或命令行;交互场景用 passwordPrompt(),自动化场景从环境变量或密钥管理系统注入。

权限核对与治理

  • 用 db.getUser("账号", { showPrivileges: true }) 查看实际生效的权限
  • 定期用 db.getUsers() 盘点账号清单,清理离职人员与废弃应用的账号
  • 按环境区分账号名,避免测试凭据被误用到生产
  • 密码轮换要配套:改密后同步更新应用配置,过渡期可保留双账号
  • 关键库可开启审计日志记录认证与授权失败,便于定位异常登录
  • 权限变更后用只读连接验证一次,确认不影响业务读写

易错点

  • 账号建在业务库却用 authSource=admin 连接,表现为认证失败,先确认账号所在的库
  • 给应用账号直接授 root 会放大凭证泄露后的影响面,按最小权限给 readWrite 即可
  • pwd 明文写在命令里会留在 Shell 历史与进程列表,交互环境用 passwordPrompt 输入
  • 改角色时 roles 会整体替换原列表,只想追加要把已有角色一并写上
  • 开启访问控制后未同步更新应用连接串,业务会整体认证失败,变更要配套灰度

数据来源与参考

  • MongoDB Manual: db.createUser()
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌