Linux环境下MongoDB权限管理策略基于**角色(Role)-用户(User)-认证(Authentication)**体系,核心要点如下:
启用认证
/etc/mongod.conf,设置 security.authorization: enabled,重启服务生效。--auth 启动服务(临时测试可用)。创建管理员账户
admin 数据库,使用 db.createUser() 创建超级管理员(角色 root),需在认证后操作。use admin
db.createUser({
user: "admin",
pwd: "强密码",
roles: ["root"]
})
普通用户权限分配
readWrite、dbAdmin)。use mydb
db.createUser({
user: "app_user",
pwd: "业务密码",
roles: [{ role: "readWrite", db: "mydb" }]
})
| 角色类型 | 典型场景 | 核心权限 |
|---|---|---|
| 内置角色 | ||
root |
超级管理员(管理所有库、用户、集群) | 所有操作权限 |
dbOwner |
数据库管理员(增删改查+用户管理) | dbAdmin+userAdmin+readWrite |
readWrite |
普通业务用户(增删改查数据) | 数据读写权限 |
read |
只读用户(查询数据) | 仅 find 操作权限 |
| 集群角色 | ||
clusterAdmin |
集群管理(节点启停、复制集配置) | 集群级操作权限 |
backup/restore |
备份与恢复 | 备份/恢复操作权限 |
自定义角色
db.createRole() 定义细粒度权限,组合 privileges(资源+操作)和 roles(继承其他角色)。db.createRole({
role: "customRole",
privileges: [
{ resource: { db: "finance", collection: "transactions" }, actions: ["find", "insert"] }
],
roles: ["read"]
})
权限验证与审计
db.auth() 验证用户权限,db.getUser() 查看用户角色。systemLog.destination: file)记录操作行为,便于追溯。访问控制优化
net.bindIp 仅允许受信任IP连接。net.http.RESTInterfaceEnabled: false)。db.getUsers() 定期检查用户权限,删除冗余账户。net.ssl.mode: requireSSL),保护数据传输安全。mongodb)运行服务,避免使用root权限。参考来源: