MongoDB只读角色用户能否删集合/库?如何限制删除权限?
MongoDB只读用户权限问题解答
1. 这种删除行为符合read角色预期吗?
完全不符合。MongoDB内置的read角色仅授予目标数据库的只读权限——比如查询数据、查看集合列表,但绝对不包含删除集合、修改数据或变更数据库的权限。出现这个问题,肯定是配置环节出了疏漏。
2. 排查与修复方案
检查用户实际拥有的角色:用管理员账号登录MongoDB,执行以下命令确认
powerbi用户的角色列表,看是否意外获得了其他高权限角色:use apigtac db.getUser("powerbi")如果结果中除了
read,还存在dbOwner、readWrite这类带删除/修改权限的角色,立即移除多余角色:db.revokeRolesFromUser("powerbi", [ { role: "多余角色名称", db: "apigtac" } ])确认认证数据库是否正确:你创建用户时指定
apigtac作为认证数据库,但如果用户登录时未明确指定该库(比如默认使用admin库),可能会继承其他库的权限。登录时需明确指定认证数据库:mongo --host 你的主机地址 --port 端口号 -u powerbi -p abc123 --authenticationDatabase apigtac自定义更严格的只读角色(可选):如果需要极致的权限控制,可以创建一个比内置
read角色更严格的自定义角色,仅开放必要的读取权限:use apigtac db.createRole({ role: "strictRead", privileges: [ { resource: { db: "apigtac", collection: "" }, actions: [ "find", "listCollections", "listIndexes" ] } ], roles: [] })然后将该角色赋予
powerbi,同时移除原有的read角色:db.grantRolesToUser("powerbi", [ { role: "strictRead", db: "apigtac" } ]) db.revokeRolesFromUser("powerbi", [ { role: "read", db: "apigtac" } ])检查MongoDB权限验证开关:最容易忽略的一点——确认
mongod启动时添加了--auth参数。如果未开启权限验证,所有用户都会默认拥有超级管理员权限,删除集合自然不受限制。
内容的提问来源于stack exchange,提问作者Diego Flores Chávez
相关产品推荐
相关产品推荐

