在 MongoDB 中,用户管理是权限控制的核心。用户的创建位置决定了其作用范围和管理方式。本文系统讲解 MongoDB 两种用户类型的区别、使用场景与管理操作。


一、两种类型的用户

1. admin 数据库创建的用户(全局用户)

这种用户是在 admin 数据库中创建的,可以访问多个数据库,并对多个数据库赋予不同权限。

use admin

db.createUser({
  user: "adminUser",
  pwd: "secure123",
  roles: [
    { role: "readWrite", db: "sales" },
    { role: "read", db: "analytics" }
  ]
})

特点

  • 用户信息存储在 admin 库;
  • 可以管理和访问多个数据库;
  • 适合平台管理员、系统服务等集中权限场景。

使用场景

  • 运维或 DevOps 脚本;
  • 应用需要访问多个数据库;
  • 多库统一管理权限。

2. 普通数据库创建的用户(局部用户)

这种用户只能在某一个数据库中创建,默认仅能访问该数据库。

use appdb

db.createUser({
  user: "appUser",
  pwd: "pass123",
  roles: [ { role: "readWrite", db: "appdb" } ]
})

特点

  • 用户信息只存在于当前库;
  • 默认只能访问当前数据库;
  • 隔离性好,更安全。

使用场景

  • Web 应用访问自己的数据;
  • 每个业务数据库独立授权;
  • 多租户系统中的租户隔离。

二、常见用户管理操作

创建用户

db.createUser({
  user: "user1",
  pwd: "123456",
  roles: [ { role: "readWrite", db: "mydb" } ]
})

修改用户密码

db.updateUser("user1", { pwd: "newpass" })

要在用户所属数据库执行。

授权额外数据库

仅适用于 admin 用户:

db.grantRolesToUser("user1", [
  { role: "read", db: "logdb" }
])

撤销某个权限

db.revokeRolesFromUser("user1", [
  { role: "read", db: "logdb" }
])

删除用户

db.dropUser("user1")

查看用户与权限

db.getUsers()
db.getUser("user1")

三、不能直接修改用户名

MongoDB 不支持改用户名,推荐做法:

  1. 创建新用户;
  2. 复制权限;
  3. 删除旧用户。
db.createUser({
  user: "newUser",
  pwd: "abc123",
  roles: [ { role: "readWrite", db: "mydb" } ]
})

db.dropUser("oldUser")

四、最佳实践建议

  • 管理员类账户统一使用 admin 用户创建;
  • 普通应用访问建议使用局部用户;
  • 不同业务使用不同账户,防止权限串用;
  • 对读写、监控等职责设立独立账户。

MongoDB 用户管理不仅影响数据安全,也决定了系统的可维护性。理解并合理使用 admin 用户和局部用户,将帮助你建立更清晰、更安全的权限模型.