MongoDB 7.0只读用户可执行删除/写入操作的问题求助
MongoDB 7.0 只读角色权限异常排查与解决
问题分析
你创建的findRole仅配置了example库下所有集合的find权限,但用户emre仍能执行删除、写入操作,大概率是以下几个原因导致:
排查与解决步骤
1. 确认MongoDB是否开启权限认证
如果MongoDB启动时未开启认证,所有用户默认拥有超级权限,这是最常见的问题:
- 检查启动参数:确认启动命令包含
--auth,或配置文件(如mongod.conf)中设置了:security: authorization: enabled - 若未开启,停止服务后添加上述配置,重启MongoDB。
2. 验证角色与用户的权限配置
登录admin库,执行以下命令确认权限配置:
- 查看角色权限:
确认返回结果中仅包含db.getRole("findRole", { showPrivileges: true })example库的find操作权限。 - 查看用户角色关联:
确认用户仅绑定了db.getUser("emre")example库的findRole,无其他高权限角色(如readWrite、dbOwner)。
3. 重新创建正确的角色与用户
若权限配置有误,先清理旧的角色和用户,再重新创建:
// 登录admin库 use admin // 删除旧用户和角色 db.dropUser("emre") db.dropRole("findRole") // 重新创建只读角色 db.createRole({ role: "findRole", privileges: [ { resource: { db: "example", collection: "" }, actions: ["find"] } ], roles: [] }) // 重新创建绑定角色的用户 db.createUser({ user: 'emre', pwd: 'password123', roles: [{role: 'findRole', db: 'example'}] })
4. 验证权限有效性
用emre用户登录example库,执行以下操作验证:
- 尝试删除集合:
db.test.drop(),应返回权限不足的错误。 - 尝试写入数据:
db.test.insert({a: 1}),应返回权限不足的错误。
内容的提问来源于stack exchange,提问作者emreyanik
相关产品推荐
相关产品推荐

