MongoDB 5.0.8内置read角色用户仍可写入更新文档问题求助
MongoDB read角色账号异常拥有写入权限修复方案
你配置的read是MongoDB内置的标准只读角色,默认仅包含find、aggregate等读操作权限,完全不包含insert、update、delete类写入权限,出现越权写入是配置疏漏导致,按以下顺序排查修复即可:
- 检查实例是否开启身份认证
这是最高发的原因:部署时如果没在配置文件开启鉴权,或者启动时没加--auth参数,所有连接(不管填什么账号密码)都默认拥有实例最高权限,创建的用户角色规则完全不生效。
验证方法:不填账号密码直接直连MongoDB实例,执行db.adminCommand({listDatabases:1}),如果能正常返回全量库列表,就是没开鉴权。
修复操作:- 打开MongoDB配置文件,默认路径为
/etc/mongod.conf - 修改security段配置:
security: authorization: enabled - 重启mongod服务,配置就会生效。
- 打开MongoDB配置文件,默认路径为
- 检查用户是否被跨库授予了高权限角色
你当前只查询了leaderboard-db库下的用户配置,如果同名aa账号在admin库被绑定了readWrite、dbOwner、readWriteAnyDatabase这类带写入权限的角色,权限会跨库生效。
验证方法:切换到admin库查询该用户的全量权限:
如果返回结果里存在use admin db.getUser("aa", {showPrivileges: true})leaderboard-db库read之外的其他角色,直接回收多余权限即可,示例命令:// 回收误授予的全局写权限示例,根据实际查到的多余角色调整参数 db.revokeRolesFromUser( "aa", [ { role: "readWriteAnyDatabase", db: "admin" } ] ) - 检查Studio 3T连接参数配置是否正确
你创建用户时指定的认证机制为SCRAM-SHA-256,如果连接时选错了认证机制、或者填错了认证库,可能触发认证逻辑异常,实际连接未走正常鉴权流程。
正确连接参数要求:- 认证数据库:填写
leaderboard-db - 认证机制:选择
SCRAM-SHA-256 - 用户名、密码和创建时保持一致
- 认证数据库:填写
所有配置调整完成后,用aa账号重新连接实例,执行一条测试写入命令验证效果:
db.test_coll.insert({msg: "permission_test"})
如果返回类似WriteError: not authorized on leaderboard-db to execute command的报错,说明权限配置已经生效,账号仅保留只读能力,无法执行任何写入操作。
内容的提问来源于stack exchange,提问作者Jaskirat Singh
相关产品推荐
相关产品推荐

