温馨提示×

Linux MongoDB配置中的权限管理怎么做

小樊
45
2026-01-03 03:16:48
栏目: 云计算

Linux 上 MongoDB 权限管理实操指南

一 核心概念与内置角色

  • 权限模型基于“用户-角色-权限”,用户在其“认证数据库”登录,但可被授予跨库角色;管理用户通常在 admin 数据库创建。
  • 常用内置角色分类与作用:
    • 数据库用户:readreadWrite
    • 数据库管理:dbAdmindbOwneruserAdmin
    • 集群管理:clusterAdminclusterManagerclusterMonitorhostManager
    • 备份恢复:backuprestore
    • 所有数据库:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase
    • 超级用户:root(以及可间接获得广泛权限的 dbOwneruserAdminuserAdminAnyDatabase
  • 实践要点:创建高权限账号(如 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 角色单独建账号,限定可访问的备份库/目录,避免与业务账号混用。

0