CentOS 上 MongoDB 权限管理实操指南
一 启用认证与网络边界
- 编辑配置文件 /etc/mongod.conf,开启基于角色的访问控制(RBAC):
- 仅本地访问时,将监听地址限制为回环:
- 如需远程访问,按需添加内网地址到 bindIp,并配合防火墙仅放通必要来源;重启生效:
- sudo systemctl restart mongod
- 防火墙示例(放通 27017 端口):
- sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp
- sudo firewall-cmd --reload
- 说明:在未启用认证前,MongoDB 对本地连接可能提供完全管理权限,上线前务必先完成认证与最小权限配置。
二 内置角色与最小权限设计
- 常用内置角色与作用域
- 数据库用户:read、readWrite
- 数据库管理:dbAdmin、dbOwner、userAdmin
- 集群管理:clusterAdmin、clusterManager、clusterMonitor、hostManager
- 备份恢复:backup、restore
- 所有数据库:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级角色:root
- 角色放置规则
- 跨库角色(如 userAdminAnyDatabase、readWriteAnyDatabase 等)只能在 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 与系统补丁 为最新,定期审计用户与权限。