升级至DotNet 6后MySql Server连接认证失败问题咨询
问题原因
- 这个问题和业务代码、MySQL服务端权限配置都没有关系,核心是
MySql.Data 8.0.29版本的.NET 6适配bug。 - 该版本驱动发布时.NET 6刚正式上线,Oracle官方没有覆盖全场景适配,在.NET 6运行时执行
mysql_native_password认证流程时,会对配置里传入的密码做错误的编码转换,最终传给MySQL服务端的密码和实际配置值不一致,就会抛出访问拒绝异常。 - 这个bug是特定版本搭配才会触发的:只有
MySql.Data 8.0.26到8.0.29区间的版本跑在.NET 6环境下才会复现,在.NET 5及更早框架下不会触发这段有问题的解析逻辑,所以回退框架版本后连接立刻恢复正常。
修复方案
以下方案任选其一即可,不需要修改任何业务代码:
- 首选方案:把Nuget包
MySql.Data升级到8.0.30及以上的正式稳定版。Oracle在8.0.30版本里已经修复了这个.NET 6环境下的认证编码bug,升级后原有连接配置不需要调整就能正常使用。 - 临时规避方案:如果暂时不能升级驱动版本,就在现有数据库连接字符串最后追加
Old Guids=True;参数,强制驱动走兼容逻辑分支,绕开密码解析的bug。 - 长期替代方案:把
MySql.Data替换为社区维护的MySqlConnector驱动,这个驱动对.NET 5+新版本框架的适配更及时,没有这类适配bug,而且和Dapper完全兼容,替换不需要改数据访问层的代码。
内容的提问来源于stack exchange,提问作者Mats
相关产品推荐
相关产品推荐

