MongoDB角色权限失效:只读用户可操作任意数据库
MongoDB权限异常排查问题
启动及登录方式
mongod --auth mongosh --username 'kaito' --password 'kaito' --authenticationDatabase kaito --host 10.0.0.111
创建的用户信息
[ { _id: 'kaito.kaito', userId: UUID('f104a209-fe36-4b19-99c0-515a45938e30'), user: 'kaito', db: 'kaito', roles: [ { role: 'read', db: 'kaito' } ], mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ] } ]
问题
预期该用户仅能读取kaito数据库,但实际它可对任意数据库执行任意操作。请问忽略了什么?
执行db.adminCommand({getCmdLineOpts: 1})返回结果
{ argv: [ '/usr/bin/mongod', '--config', '/etc/mongod.conf' ], parsed: { config: '/etc/mongod.conf', net: { bindIp: '0.0.0.0', port: 27017 }, processManagement: { timeZoneInfo: '/usr/share/zoneinfo' }, storage: { dbPath: '/var/lib/mongodb', journal: { enabled: true } }, systemLog: { destination: 'file', logAppend: true, path: '/var/log/mongodb/mongod.log' } }, ok: 1 }
排查结论
核心问题是你启动时指定的--auth参数并未生效。从getCmdLineOpts的返回结果可以看到,mongod实际加载了/etc/mongod.conf配置文件,但该配置里没有开启权限控制,且配置文件的优先级高于命令行参数,导致--auth被覆盖。
解决步骤:
- 打开
/etc/mongod.conf,添加或启用权限配置:
security: authorization: enabled
- 重启mongod服务,让配置生效。
此时权限控制会正常启用,kaito用户将仅拥有kaito数据库的只读权限,无法操作其他数据库。
内容的提问来源于stack exchange,提问作者DuchSuvaa
相关产品推荐
相关产品推荐

