You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 13:30:13