在 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 不支持改用户名,推荐做法:
- 创建新用户;
- 复制权限;
- 删除旧用户。
db.createUser({
user: "newUser",
pwd: "abc123",
roles: [ { role: "readWrite", db: "mydb" } ]
})
db.dropUser("oldUser")
四、最佳实践建议
- 管理员类账户统一使用 admin 用户创建;
- 普通应用访问建议使用局部用户;
- 不同业务使用不同账户,防止权限串用;
- 对读写、监控等职责设立独立账户。
MongoDB 用户管理不仅影响数据安全,也决定了系统的可维护性。理解并合理使用 admin 用户和局部用户,将帮助你建立更清晰、更安全的权限模型.