MongoDB在Ubuntu上的认证与授权机制
导读:MongoDB 在 Ubuntu 的认证与授权机制 一 核心概念与工作流程 身份源与存储:用户凭证与权限信息以文档形式存储在 admin.system.users 集合中;创建或修改用户需具备相应的用户管理权限。 认证方式:客户端连接时提...
MongoDB 在 Ubuntu 的认证与授权机制
一 核心概念与工作流程
- 身份源与存储:用户凭证与权限信息以文档形式存储在 admin.system.users 集合中;创建或修改用户需具备相应的用户管理权限。
- 认证方式:客户端连接时提供 用户名/密码,MongoDB 在指定的 认证数据库(authenticationDatabase) 校验凭据;该数据库通常是创建该用户的数据库(如 admin)。
- 授权模型:基于角色的访问控制(RBAC)。角色可在数据库级、集群级、备份恢复级、全库级等范围授予;常见角色包含 read、readWrite、dbAdmin、dbOwner、userAdmin、userAdminAnyDatabase、readAnyDatabase、readWriteAnyDatabase、dbAdminAnyDatabase、root 等。
- 最小权限原则:生产环境建议仅授予业务所需的最小角色,避免滥用高权限角色(如 root)。
二 启用认证的标准步骤
- 安装与启动:通过官方仓库安装 mongodb-org,使用 systemd 管理服务(如:sudo systemctl enable --now mongod)。
- 创建初始管理员(未开启授权前):连接 mongo shell,切换到 admin 数据库,创建具有管理能力的用户(如授予 root 或 userAdminAnyDatabase)。示例:
- use admin
- db.createUser({ user: “admin”, pwd: “StrongPass!”, roles: [{ role: “root”, db: “admin” } ] } )
- 启用授权:编辑 /etc/mongod.conf,在 security 段开启授权并重启服务:
- security:
- authorization: enabled
- sudo systemctl restart mongod
- security:
- 验证:使用创建的管理员连接并测试权限(如列出数据库)。示例:
- mongo -u “admin” -p “StrongPass!” --authenticationDatabase “admin”
三 用户与角色实践
- 数据库专属用户:为业务库创建仅在该库可用的账号,遵循最小权限。示例(在目标库中创建):
- use sales
- db.createUser({ user: “sales_rw”, pwd: “SalesPass!”, roles: [{ role: “readWrite”, db: “sales” } ] } )
- 跨库只读用户:为一个用户授予多个库的只读权限。示例:
- use reporting
- db.createUser({ user: “report_ro”, pwd: “ROReport!”, roles: [ { role: “read”, db: “sales” } , { role: “read”, db: “products” } , { role: “read”, db: “accounts” } ] } )
- 权限变更:优先使用 db.grantRolesToUser / db.revokeRolesFromUser 增量调整,避免用 db.updateUser 完全覆盖既有角色导致误删。
- 连接串要点:连接时通过 –authenticationDatabase 指定创建该用户的数据库(管理用户通常为 admin)。
四 网络安全与运维要点
- 绑定地址:在 /etc/mongod.conf 的 net 段设置 bindIp,默认仅本地 127.0.0.1;如需远程仅开放必要网段(如内网网段)。示例:bindIp: 127.0.0.1,192.168.1.0/24。
- 传输加密:启用 SSL/TLS 保护数据链路。示例:
- net:
- ssl:
- mode: requireSSL
- PEMKeyFile: /path/to/server.pem
- CAFile: /path/to/ca.pem
- ssl:
- net:
- 防火墙:使用 ufw/iptables 限制 27017 端口访问来源,仅允许可信主机或内网访问。
- 审计与日志:开启审计日志以记录关键操作,便于合规与溯源(在 systemLog 中配置日志路径与审计选项)。
- 系统加固(可选):如 禁用透明大页(THP)、调优 ulimit 与 vm.max_map_count,提升稳定性与性能。
五 常见问题与排查
- 启用授权后无法登录:确认连接使用了正确的 –authenticationDatabase(管理账号通常为 admin),且账号已在对应数据库创建并具备所需角色。
- 本地仍可免密访问:早期或默认配置可能仅绑定 127.0.0.1 且未启用授权;请检查 bindIp 与 security.authorization=enabled,并重启服务。
- 权限不足(Error 13):为用户授予所需角色(如业务库授予 readWrite,管理需求授予 userAdmin 或更高)。
- 修改权限异常:避免直接用 db.updateUser 覆盖角色,使用 grantRolesToUser / revokeRolesFromUser 进行增量变更。
- 忘记管理员密码:以无授权模式临时启动 mongod,连接 admin 后重置密码或重建管理员,再恢复授权模式并重启。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MongoDB在Ubuntu上的认证与授权机制
本文地址: https://pptw.com/jishu/788917.html
