第一次连接未被访问过的MySql数据库报错 返回

现象:
数据库服务器重启后,接口直接报错,如果使用Navicat连接检查时可以连上,接口又恢复正常了。
问题:
连接字符串加上 SslMode=none 后使用SqlSugar连接Mysql时,如果Mysql从来没有被连接过会报错
Authentication method 'caching_sha2_password' failed.Either use a secure connection,specify the server's RSA public key with ServerRSAPublicKeyFile, or set AllowPublicKeyPetrieval=True
如果这时使用其他工具连接上数据库后(不用做任何操作,就是连接上)再次连接可以了。其中数据库 my.ini 没有配置任何SSL相关设置(默认),用户配置的是'caching_sha2_password'。
复现步骤:
重启Mysql服务后不要有任何连接去访问,这时使用带着SslMode=none的连接字符串去连接Mysql就会报错。
使用其他工具访问这个Mysql服务后再次连接,连接成功。
如果去掉 SslMode=none 连接时本地可以连接成功,没有这个问题,但是发布后就会连不上数据库(因为数据库本身也没配置SSL)。
Mysql版本:8.30.0 及以上都行(其实8.2x好像也会)
SqlSugar版本: 5.1.4.86
.Net版本:.Net6
Mysql连接字符串: Data Source=服务器IP;Database=数据库名称;UserId=用户名;Password=密码;port=端口;SslMode=none;Connection Timeout=80;
我是使用以下方式注入全局的
热忱回答(8)
-
fate sta VIP0
2024/1/30注入前不要加open
0 回复 -
fate sta VIP0
2024/1/30Pooling=false;
字段串在加上这个试试
0 回复 -
AGC66 VIP0
2024/1/30@fate sta:我在代码里去掉了 Open,加了Pooling=false但是问题还是存在,应该和这个没关系
0 回复 -
fate sta VIP0
2024/1/30@AGC66:另外把myqlconnector升级最新
0 回复 -
fate sta VIP0
2024/1/30还连不上就要自个原因了用new MyConnection(字符串).Open() 这个能连就行
0 回复 -
AGC66 VIP0
2024/1/30@fate sta:使用 new MyConnection还是报这个错,应该是Mysql的问题,我再找找,感谢解答
0 回复 -
AGC66 VIP0
2024/1/30原因:
若仅配置SslMode=none,未配置AllowPublicKeyRetrieval=True时,当MySQL服务端应用用户认证缓存失效时,应用端可能会认证错误,此情况需确保数据库服务端应用用户认证缓存不失效(即在MySQL服务端应用用户缓存失效操作后,进行一次应用用户认证登录)。
解决方案有三
连接字符串配置 AllowPublicKeyRetrieval=true; 及从服务端获取Key来解决第一次验证失效,可能会导致恶意代理通过中间人攻击(MITM)获取到明文密码,谨慎开启。
更改用户的验证方式为 mysql_native_password 。好像主从复制必须要 caching_sha2_password,可以考虑这种方案。
为服务器添加SSL证书(可以使用OpenSSL制作,AI有详情步骤),并在字符串中填写认证密钥 CertificatePassword=你的密钥 。
0 回复 -
AGC66 VIP0
2024/1/30@AGC66:SslMode=none
0 回复