如何配置MongoDB用户实现完全只读权限(禁止数据更新)
MongoDB 完全只读用户配置方案
问题根源
你配置的read角色本身仅包含读取类权限(如find、dbStats、collStats),不允许写操作。当前能编辑现有条目,大概率是用户被额外分配了写权限(直接权限或继承自其他角色),或是目标集合存在单独的权限开放。
修复步骤
1. 核对目标用户身份
注意:你的用户文档中user字段值为user01(_id为admin.xyz是系统生成的标识),后续操作需以user01作为用户名。
2. 查看用户当前权限详情
切换至admin库,执行命令查看用户的完整权限配置:
use admin db.getUser("user01")
重点检查roles和privileges字段,确认是否存在insert、update、delete、findAndModify这类写权限条目。
3. 重置为纯只读角色
执行以下命令清空用户所有直接权限,并仅保留目标数据库的read角色:
use admin db.updateUser("user01", { roles: [ { role: "read", db: "myDatabase01" }, { role: "read", db: "myDatabase02" } ], privileges: [] // 移除所有直接分配的权限 })
4. 撤销集合级写权限(若存在)
如果目标数据库的集合单独给用户开放了写权限,执行命令批量撤销:
// 撤销myDatabase01和myDatabase02所有集合的写权限 use admin db.runCommand({ revokePrivilegesFromUser: "user01", privileges: [ { resource: { db: "myDatabase01", collection: "" }, actions: ["insert", "update", "delete", "findAndModify"] }, { resource: { db: "myDatabase02", collection: "" }, actions: ["insert", "update", "delete", "findAndModify"] } ] })
5. 验证权限
使用user01重新连接数据库,尝试执行新增、编辑、删除操作,确认均被拒绝,仅能正常执行查询类操作。
内容的提问来源于stack exchange,提问作者suther
相关产品推荐
相关产品推荐

