MongoDB授权失败求助:Spring Boot连接test_db无权限执行命令
解决Spring Boot连接MongoDB时的权限认证错误(Error Code 13)
看起来你遇到的问题是:虽然已经创建了拥有root角色的管理员用户,也开启了MongoDB的权限认证,但Spring Boot访问test_db时仍提示没有权限执行查询命令。我们一步步来排查解决:
1. 先确认MongoDB配置已生效
修改mongod.conf开启authorization后,必须重启MongoDB服务才能让配置生效,这是最容易忽略的关键点。
根据你的操作系统,用对应命令重启服务:
# Ubuntu/Debian系统 sudo systemctl restart mongod # CentOS/RHEL系统 sudo systemctl restart mongod # Windows系统 net stop MongoDB && net start MongoDB
2. 验证用户的权限配置是否正确
进入MongoDB Shell,用你的管理员用户认证,确认用户确实拥有root角色:
mongo -u username -p pass --authenticationDatabase admin
进入Shell后切换到admin库,查看用户详情:
use admin db.getUser("username")
返回结果的roles数组里,应该包含{ "role" : "root", "db" : "admin" }。如果没有,说明用户创建过程有问题,重新执行创建命令:
db.createUser({user: 'username', pwd: 'pass', roles: [ { role: 'root', db: 'admin' }] });
3. 显式赋予用户test_db的权限(可选但实用)
虽然root角色理论上拥有所有数据库的最高权限,但偶尔会因为MongoDB的权限继承逻辑,导致对特定数据库的权限没有正常生效。这时候可以显式给用户添加test_db的权限:
在MongoDB Shell中执行:
use admin # 赋予读写权限(满足大部分业务需求) db.grantRolesToUser("username", [{ role: "readWrite", db: "test_db" }]) # 或者直接赋予数据库所有者权限(包含该库的所有操作权限) # db.grantRolesToUser("username", [{ role: "dbOwner", db: "test_db" }])
4. 再次确认Spring Boot配置无误
你的yml配置看起来没问题,但再核对几个核心点:
authentication-database: admin:必须设置为admin,因为用户是在admin库创建的database: test_db:确保目标数据库名称拼写正确username和password没有大小写或拼写错误
修改配置后重启Spring Boot应用,重新测试连接。
5. 手动测试用户对test_db的访问权限
在MongoDB Shell中,认证后切换到test_db,手动执行报错中的查询命令,验证用户本身是否有权限:
use test_db db.dbchangelog.find({ changeId: 1, author: 1 }).limit(1)
如果这个命令能正常返回结果,说明用户权限没问题,可能是Spring Boot的MongoDB驱动版本过低导致的兼容性问题,可以尝试升级驱动到最新稳定版。
按照以上步骤排查,应该能解决这个权限认证错误。
内容的提问来源于stack exchange,提问作者Januka samaranyake
相关产品推荐
相关产品推荐

