温馨提示×

Ubuntu MongoDB权限管理怎么做

小樊
44
2025-11-29 00:59:41
栏目: 云计算

Ubuntu 上 MongoDB 权限管理实操指南

一 核心概念与准备

  • MongoDB 采用基于角色的访问控制 RBAC:用户被赋予一个或多个角色,角色由资源(数据库、集合、集群)与操作(如 find、insert、killOp 等)组成,未授予的权限一律不可执行。启用访问控制后,所有客户端连接必须先完成身份验证。在 Ubuntu 上,通常通过配置文件或命令行参数开启授权。为安全起见,建议先准备一个具有用户管理能力的账号,再开启访问控制。MongoDB 默认不启用授权,需显式通过 –auth 或配置文件 security.authorization 开启。

二 启用访问控制与基础安全

  • 步骤概览
    1. 以无认证方式临时连接实例(若已启用 auth 则先使用管理员登录):mongosh --port 27017
    2. admin 库创建“用户管理员”(具备创建/管理用户与角色的能力):
      use admin
      db.createUser({
        user: "admin",
        pwd: passwordPrompt(),   -- 推荐交互输入密码
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      })
      
    3. 编辑配置文件 /etc/mongod.conf,启用授权并限制网络暴露:
      net:
        port: 27017
        bindIp: 127.0.0.1
      security:
        authorization: enabled
      
    4. 重启服务使配置生效:sudo systemctl restart mongod
    5. 验证:使用刚创建的管理员连接并认证
      mongosh --port 27017 -u admin -p --authenticationDatabase admin
      
    6. 如需远程访问,仅在内网可信环境开放 bindIp,并配合防火墙TLS/SSL;生产环境不建议对公网开放 27017 端口。

三 创建业务用户与分配权限

  • 原则:在哪个数据库创建用户,该用户的“认证数据库”就是哪个库;连接时通过 --authenticationDatabase 指定。
  • 示例
    • 为业务库 mydb 创建具备读写与管理能力的用户(dbOwner 包含读写、索引、用户在该库的管理等):
      use mydb
      db.createUser({
        user: "mydb_user",
        pwd: passwordPrompt(),
        roles: [ { role: "dbOwner", db: "mydb" } ]
      })
      
    • 只读用户(仅能读取 mydb):
      use mydb
      db.createUser({
        user: "mydb_read",
        pwd: passwordPrompt(),
        roles: [ { role: "read", db: "mydb" } ]
      })
      
    • 连接验证(以只读用户为例):
      mongosh mongodb://mydb_read:YOUR_PASSWORD@localhost:27017/mydb
      
    • 跨库权限示例(一个用户拥有多个库的角色):
      use admin
      db.createUser({
        user: "ops",
        pwd: passwordPrompt(),
        roles: [
          { role: "readWrite", db: "mydb" },
          { role: "read", db: "reporting" }
        ]
      })
      
    • 常用内置角色速览
      • 数据库级:readreadWritedbAdmindbOwneruserAdmin
      • 集群级:clusterAdminclusterMonitorhostManager
      • 全局级:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase
      • 超级用户:root(仅在 admin 库创建)

四 用户与权限的维护

  • 查看与验证
    • 查看某库的用户:use mydb; show users
    • 查看用户详情与权限:use mydb; db.getUser("mydb_user")
    • 查看角色与特权:db.getRole("readWrite", { showPrivileges: true })
  • 修改与撤销
    • 更新用户角色:db.updateUser("mydb_user", { roles: [ { role: "readWrite", db: "mydb" } ] })
    • 撤销角色:db.revokeRolesFromUser("mydb_user", [ { role: "readWrite", db: "mydb" } ])
    • 删除用户:use mydb; db.dropUser("mydb_user")
  • 连接串示例(含认证库)
    • 读写用户:mongosh mongodb://mydb_user:PASSWORD@HOST:27017/mydb
    • 只读用户:mongosh mongodb://mydb_read:PASSWORD@HOST:27017/mydb
    • 管理员:mongosh mongodb://admin:PASSWORD@HOST:27017/admin

五 常见注意事项

  • 开启授权后,未认证的连接将只能进行有限操作(如连接、认证),执行具体业务操作需先登录对应认证数据库
  • 创建第一个用户应为具备用户管理能力的账号(如 userAdminAnyDatabase),以便后续安全创建与维护其他用户与角色。
  • 使用强密码并定期轮换;为运维与监控创建最小权限账号,避免滥用 root
  • 如需来源限制,可为用户设置 authenticationRestrictions(IP 白名单/黑名单)以收紧访问面。

0