程序连接mongo报错: {mechanism=SCRAM-SHA-1, userName=‘root‘, source=‘admin‘, password=<hidden>

本文介绍了一个关于SpringBoot项目连接本地MongoDB时遇到的用户认证失败问题,并提供了具体的解决步骤,即在MongoDB的admin数据库中创建root账号。

1、场景

     (1)版本     

      mongo 版本4.2

      springboot  版本  2.3.0.RELEASE

     (2)yml文件配置

       mongodb:
           database: 库名
           username: 用户名
           password: 密码
           host: ip
           port: 端口号

     (3)mongo 本地安装  创建数据库以及库内用户

     (4)spring boot 项目连接本地mongo

      (5)出现用户连接失败:

                 {mechanism=SCRAM-SHA-1, userName='root', source='admin', password=<hidden>

  2、解决方案

        在mongo 默认admin库下新增root账号即可

<think> 我们正在处理一个Spring Boot应用启动时出现的MongoDB认证异常,具体是使用SCRAM-SHA-256机制的root用户认证失败。错误信息与之前类似,但这次机制是SCRAM-SHA-256,说明服务器可能要求更强的认证机制。 可能的原因和解决方案: 1. 用户不存在或密码错误:确保在admin数据库中存在root用户,且密码正确。 2. 认证机制不匹配:MongoDB服务器可能配置为仅支持SCRAM-SHA-256,而客户端尝试使用SCRAM-SHA-1?但这里已经是SHA-256了,所以可能是其他问题。 3. MongoDB服务器版本与驱动兼容性:如果服务器版本较新,而Spring Data MongoDB版本较旧,可能不支持SCRAM-SHA-256。需要确保使用的驱动版本兼容。 4. 连接字符串配置:检查连接字符串,确保指定了正确的认证数据库(authSource=admin)和机制。 解决步骤: 1. 确认MongoDB服务器上的用户:使用命令行登录MongoDB,检查admin数据库中的root用户是否存在,以及是否使用SCRAM-SHA-256创建(默认)。 2. 检查连接字符串:在Spring Boot的application.properties中,连接字符串应该类似: spring.data.mongodb.uri=mongodb://root:password@localhost:27017/admin?authMechanism=SCRAM-SHA-256 注意:如果密码中有特殊字符,需要URL编码。 3. 检查驱动版本:在pom.xml中,确保使用的Spring Boot版本(它管理的Mongo驱动)支持SCRAM-SHA-256。建议使用较新版本的Spring Boot(如2.x以上)。 4. 启用MongoDB日志:查看MongoDB服务器的日志,确认认证失败的具体原因(如错误代码18表示认证失败)。 如果上述步骤无效,可以尝试: -MongoDB中重新创建用户,并明确指定机制为SCRAM-SHA-256(默认创建的就是这个)。 - 降级MongoDB服务器的认证机制(不推荐,安全性降低),但生产环境应使用强认证。 注意:如果MongoDB服务器版本低于4.0,则不支持SCRAM-SHA-256,需要使用SCRAM-SHA-1。但根据错误信息,客户端已经尝试使用SCRAM-SHA-256,所以服务器版本应该是支持该机制的。 以下是示例连接字符串: mongodb://username:password@host:port/database?authSource=admin&authMechanism=SCRAM-SHA-256 在Spring Boot配置文件中,应该这样写: spring.data.mongodb.uri=mongodb://root:your_password@localhost:27017/your_database?authSource=admin&authMechanism=SCRAM-SHA-256 请确保替换密码和数据库名。 如果问题依旧,请检查MongoDB服务器日志,通常位于/var/log/mongodb/mongod.log,查看认证失败的具体原因。 §§相关问题§§ 1. 如何在Spring Boot中正确配置MongoDB连接字符串以支持SCRAM-SHA-256认证? 2. MongoDBSCRAM-SHA-1SCRAM-SHA-256两种认证机制有何区别,如何选择? 3. 当MongoDB认证失败时,如何通过服务器日志诊断具体原因? 4. Spring Data MongoDB版本与MongoDB服务器版本之间的兼容性如何确认? 5. 如果MongoDB用户密码包含特殊字符,在连接字符串中应该如何转义? </think> 出现 `UncategorizedMongoDbException` 异常表明 Spring Boot 应用在启动时无法通过 MongoDB 认证(使用 SCRAM-SHA-256 机制),即使已确认用户存在。以下是关键排查步骤和解决方案: --- ### **解决方案** 1. **检查密码特殊字符** - 如果密码包含 `@`、`:`、`/` 等特殊字符,在连接字符串中需进行 URL 编码 - 示例:密码 `p@ss:w/rd` 应编码为 `p%40ss%3Aw%2Frd` - 测试工具:使用在线 URL 编码器验证密码是否正确转义 2. **核对连接配置** 在 `application.properties` 中确保格式正确: ```properties spring.data.mongodb.uri=mongodb://root:encoded_password@host:27017/dbname?authSource=admin&authMechanism=SCRAM-SHA-256 ``` - 必须包含 `authSource=admin` 和显式指定机制 `authMechanism=SCRAM-SHA-256` 3. **验证用户密码策略** -MongoDB shell 执行: ```javascript use admin db.system.users.find({user:"root"}).pretty() ``` - 检查 `credentials` 字段是否显示 `SCRAM-SHA-256`(若为 `SCRAM-SHA-1` 需重建用户) 4. **重建用户(强制使用 SHA-256)** ```javascript use admin db.dropUser("root") db.createUser({ user: "root", pwd: "new_password", roles: ["root"], mechanisms: ["SCRAM-SHA-256"] // 显式指定机制 }) ``` 5. **检查驱动兼容性** - 确认 Spring Boot 版本与 MongoDB 驱动匹配: - Spring Boot 2.5+ 默认支持 SCRAM-SHA-256 - 旧版本需升级依赖或添加: ```xml <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>4.4+</version> </dependency> ``` --- ### **深度诊断** - **查看 MongoDB 日志**: `/var/log/mongodb/mongod.log` 中搜索 `AuthenticationFailed` - **临时关闭认证**: 测试应用是否正常连接(缩小问题范围) - **网络层检查**: 使用 `telnet host 27017` 验证端口可达性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值