Linux系统中MongoDB的权限控制
导读:MongoDB 在 Linux 上的权限控制实践 一 核心概念与内置角色 MongoDB 采用 RBAC(基于角色的访问控制),权限通过“角色”授予,用户可拥有一个或多个角色。角色在特定数据库中创建,角色名与数据库名组合唯一;在 admi...
MongoDB 在 Linux 上的权限控制实践
一 核心概念与内置角色
- MongoDB 采用 RBAC(基于角色的访问控制),权限通过“角色”授予,用户可拥有一个或多个角色。角色在特定数据库中创建,角色名与数据库名组合唯一;在 admin 数据库中创建的角色可包含对 admin、其他数据库或集群 的权限,且可跨库继承。所有角色信息统一存储在 admin.system.roles 集合,应通过角色管理命令操作,避免直接修改该集合。内置角色常见分层:数据库用户角色(read、readWrite)、数据库管理角色(dbAdmin、dbOwner、userAdmin)、集群管理角色(clusterAdmin、clusterManager、clusterMonitor、hostManager)、备份恢复角色(backup、restore)、所有数据库角色(readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase)以及超级用户角色(root)。遵循最小权限原则进行授权。
二 启用认证与创建管理员
- 启用认证:编辑 /etc/mongod.conf,设置 security: authorization: enabled 重启服务:sudo systemctl restart mongod。首次启用前,先在本地无认证状态下创建管理员账户,避免被锁。
- 创建用户管理员(仅在 admin 库创建,具备全局用户管理能力): use admin db.createUser({ user: “myUserAdmin”, pwd: passwordPrompt(), // 交互输入更安全 roles: [ { role: “userAdminAnyDatabase”, db: “admin” } , { role: “readWriteAnyDatabase”, db: “admin” } ] } ) 连接与认证:mongosh --port 27017 -u myUserAdmin -p --authenticationDatabase admin;或在 shell 中 db.auth(“myUserAdmin”, passwordPrompt())。生产环境不建议直接使用 root,而是以用户管理员按需创建与授权其他账户。
三 按库授权与最小权限示例
- 应用读写用户(仅对目标库授权): use myApp db.createUser({ user: “appUser”, pwd: passwordPrompt(), roles: [{ role: “readWrite”, db: “myApp” } ] } )
- 报表只读用户: use myApp db.createUser({ user: “reportUser”, pwd: passwordPrompt(), roles: [{ role: “read”, db: “myApp” } ] } )
- 数据库管理员(可对单库做几乎所有管理,不含跨库用户管理): use myApp db.createUser({ user: “appAdmin”, pwd: passwordPrompt(), roles: [{ role: “dbOwner”, db: “myApp” } ] } )
- 验证与变更:
- 验证权限:db.runCommand({ connectionStatus: 1 } )、或切换库后执行代表性操作。
- 授权调整:db.grantRolesToUser()、db.revokeRolesFromUser();查看:db.getUser()、db.getRole(…, { showPrivileges:true} )。
- 修改密码:db.changeUserPassword(“username”,“newpassword”);删除用户:db.dropUser(“username”)。
四 自定义角色与细粒度权限
- 当内置角色无法满足需求时,可在目标数据库创建自定义角色,精确授予资源与操作: use reporting db.createRole({ role: “reportingLimited”, privileges: [ { resource: { db: “reporting”, collection: “sales” } , actions: [“find”, “aggregate”, “project”] } ], roles: [] } ) 将角色授予用户: use reporting db.grantRolesToUser(“reportUser”, [“reportingLimited”])
- 角色作用域要点:在 admin 中创建的角色可包含对 集群 与其他数据库的特权;在普通数据库创建的角色仅能包含该库内的特权。角色信息统一存于 admin.system.roles,请使用角色管理命令维护。
五 集群与网络安全加固
- 复制集/分片集群的内部认证:使用 Keyfile(各节点同一份,权限建议 400/600),或 x.509 证书;在配置中启用 security.keyFile 并开启 authorization。示例(mongod.conf): security: keyFile: /path/to/keyfile authorization: enabled 集群节点间将自动进行内部认证。
- 网络安全与运行账户:
- 绑定地址:net.bindIp: 127.0.0.1,192.168.1.100(仅内网/受信网段)。
- 防火墙:仅放行受信来源到 27017/TCP(如 firewalld/ufw 规则)。
- 运行账户:创建专用系统用户 mongodb,将数据与日志目录属主设为 mongodb,并在 systemd 服务中指定 User=mongodb、Group=mongodb,避免使用 root 运行。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux系统中MongoDB的权限控制
本文地址: https://pptw.com/jishu/783991.html
