温馨提示×

centos上mongodb权限如何管理

小樊
40
2026-01-02 02:40:24
栏目: 云计算

CentOS 上 MongoDB 权限管理实操指南

一 启用认证与网络边界

  • 编辑配置文件 /etc/mongod.conf,开启基于角色的访问控制(RBAC):
    • security:
      • authorization: enabled
  • 仅本地访问时,将监听地址限制为回环:
    • net:
      • bindIp: 127.0.0.1
  • 如需远程访问,按需添加内网地址到 bindIp,并配合防火墙仅放通必要来源;重启生效:
    • sudo systemctl restart mongod
  • 防火墙示例(放通 27017 端口):
    • sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp
    • sudo firewall-cmd --reload
  • 说明:在未启用认证前,MongoDB 对本地连接可能提供完全管理权限,上线前务必先完成认证与最小权限配置。

二 内置角色与最小权限设计

  • 常用内置角色与作用域
    • 数据库用户:readreadWrite
    • 数据库管理:dbAdmindbOwneruserAdmin
    • 集群管理:clusterAdminclusterManagerclusterMonitorhostManager
    • 备份恢复:backuprestore
    • 所有数据库:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase
    • 超级角色:root
  • 角色放置规则
    • 跨库角色(如 userAdminAnyDatabasereadWriteAnyDatabase 等)只能在 admin 数据库创建与授予。
    • 业务用户应在其目标业务库上创建,并仅授予所需角色,遵循最小权限原则

三 用户与权限的常用操作

  • 连接与认证
    • 本地:mongo -u 用户名 -p 密码 --authenticationDatabase admin
    • URI:mongodb://用户名:密码@地址:27017/?authSource=admin
  • 创建用户管理员(仅在 admin)
    • use admin
    • db.createUser({
      • user: “admin”,
      • pwd: “StrongPass!”,
      • roles: [{ role: “userAdminAnyDatabase”, db: “admin” }]
    • })
  • 创建业务库用户(在目标库)
    • use sales
    • db.createUser({
      • user: “sales_rw”,
      • pwd: “StrongPass!”,
      • roles: [{ role: “readWrite”, db: “sales” }]
    • })
  • 授权与回收
    • 授权:db.grantRolesToUser(“sales_rw”, [{ role: “read”, db: “sales” }])
    • 回收:db.revokeRolesFromUser(“sales_rw”, [{ role: “read”, db: “sales” }])
  • 查看与删除
    • 查看用户:use admin;db.system.users.find().pretty()
    • 修改密码:db.updateUser(“sales_rw”, { pwd: “NewPass!” })
    • 删除用户:use sales;db.dropUser(“sales_rw”)
  • 登录后所属库即为该用户的认证库,权限校验以其认证库与角色定义为准。

四 常见场景与命令示例

  • 应用只读账号
    • use report
    • db.createUser({
      • user: “report_ro”,
      • pwd: “StrongPass!”,
      • roles: [“read”]
    • })
  • 应用读写账号(含索引维护)
    • use appdb
    • db.createUser({
      • user: “app_rw”,
      • pwd: “StrongPass!”,
      • roles: [“readWrite”, “dbAdmin”]
    • })
  • 运维管理员(不建议长期使用 root)
    • use admin
    • db.createUser({
      • user: “ops”,
      • pwd: “StrongPass!”,
      • roles: [“clusterMonitor”, “backup”, “restore”, { role: “dbAdminAnyDatabase”, db: “admin” }]
    • })
  • 连接串示例
    • mongodb://app_rw:StrongPass!@10.0.1.10:27017/appdb?authSource=appdb
    • mongodb://report_ro:StrongPass!@10.0.1.10:27017/report?authSource=report

五 安全加固建议

  • 启用 TLS/SSL 加密传输(生产强烈建议)
    • 生成证书后配置:
      • net:
        • ssl:
          • mode: requireSSL
          • PEMKeyFile: /path/mongodb-key.pem
          • CAFile: /path/mongodb-cert.pem
    • 重启:sudo systemctl restart mongod
  • 网络与系统
    • 仅放通必要来源 IP 与端口(如 27017/tcp),优先使用内网/VPC;必要时限制 bindIp 为内网地址集合。
    • 保持 MongoDB 与系统补丁 为最新,定期审计用户与权限。

0