- 首页 >
- 问答 >
-
云计算 >
- Linux MongoDB配置中的权限管理怎么做
Linux MongoDB配置中的权限管理怎么做
小樊
45
2026-01-03 03:16:48
Linux 上 MongoDB 权限管理实操指南
一 核心概念与内置角色
- 权限模型基于“用户-角色-权限”,用户在其“认证数据库”登录,但可被授予跨库角色;管理用户通常在 admin 数据库创建。
- 常用内置角色分类与作用:
- 数据库用户:read、readWrite
- 数据库管理:dbAdmin、dbOwner、userAdmin
- 集群管理:clusterAdmin、clusterManager、clusterMonitor、hostManager
- 备份恢复:backup、restore
- 所有数据库:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户:root(以及可间接获得广泛权限的 dbOwner、userAdmin、userAdminAnyDatabase)
- 实践要点:创建高权限账号(如 userAdminAnyDatabase)应在 admin 库;需要跨库管理用户/权限时,也应在 admin 库执行;root 角色权限极大,建议仅用于紧急情况并严格管控。
二 启用认证与最小权限配置步骤
- 步骤 1 无认证启动并连接
- 启动实例(示例):mongod --port 27017 --dbpath /var/lib/mongodb
- 连接 Shell:mongosh --port 27017
- 步骤 2 创建用户管理员(在 admin 库)
- 建议仅授予用户管理能力:
- use admin
- db.createUser({ user: “myUserAdmin”, pwd: passwordPrompt(), roles: [{ role: “userAdminAnyDatabase”, db: “admin” }] })
- 步骤 3 启用访问控制并重启
- 编辑配置文件 /etc/mongod.conf:
- security: authorization: enabled
- 重启服务:sudo systemctl restart mongod(或使用 mongod --auth 方式启动)
- 步骤 4 以管理员连接并创建业务用户
- 连接:mongosh --port 27017 -u “myUserAdmin” -p --authenticationDatabase admin
- 在目标库创建只读用户(示例库为 sales):
- use sales
- db.createUser({ user: “salesReader”, pwd: “StrongPass!23”, roles: [{ role: “read”, db: “sales” }] })
- 在目标库创建读写用户:
- use sales
- db.createUser({ user: “salesRW”, pwd: “StrongPass!23”, roles: [{ role: “readWrite”, db: “sales” }] })
- 步骤 5 日常连接业务库
- mongosh --port 27017 -u “salesRW” -p --authenticationDatabase sales
说明:上述流程适用于常见 Linux 发行版与 MongoDB 4.x/5.x/6.x 的默认安装与配置路径。
三 常用用户与权限操作命令
- 修改密码:
- db.changeUserPassword(“salesRW”, “NewPass!45”) 或 db.updateUser(“salesRW”, { pwd: “NewPass!45” })
- 授予角色:
- use sales
- db.grantRolesToUser(“salesReader”, [{ role: “readWrite”, db: “sales” }])
- 回收角色:
- use sales
- db.revokeRolesFromUser(“salesRW”, [{ role: “readWrite”, db: “sales” }])
- 查看用户:
- 当前库:show users
- 全局:use admin → db.system.users.find().pretty()
- 删除用户:
- use sales → db.dropUser(“salesReader”)
- 创建自定义角色(示例:授予查看集群状态与终止操作的能力,谨慎使用):
- use admin
- db.createRole({ role: “manageOpRole”, privileges: [ { resource: { cluster: true }, actions: [“killop”,“inprog”] }, { resource: { db: “”, collection: “” }, actions: [“killCursors”] } ], roles: [] })
提示:授予 clusterAdmin、自定义高权限角色前,务必评估最小权限原则与审计要求。
四 安全加固与运维要点
- 绑定地址与端口:生产环境建议将 bindIp 限制为内网网段(如 10.x/172.16–31.x/192.168.x),并仅开放必要端口 27017;必要时配合防火墙策略。
- 认证与传输:默认使用 SCRAM 认证;对外网或跨机房访问建议启用 TLS/SSL 加密通信。
- 最小权限原则:业务账号仅授予所需角色;管理账号分权(如仅授予 userAdminAnyDatabase 的用户管理员与具备全局管理能力的 root 分离)。
- 审计与合规:结合应用与数据库审计日志,记录关键操作(鉴权成功/失败、权限变更、高代价操作)。
- 备份与恢复:为 backup/restore 角色单独建账号,限定可访问的备份库/目录,避免与业务账号混用。