使用C#连接数据库时,偶然间报了个这个错,完全时偶然的,有部分是正常的,有部分是异常的,很神奇,报错内容如下:
[Authentication to host '127.0.0.1' for user 'root' using method 'caching_sha2_password' failed with message: Reading from the stream has failed.]
2024/5/7 17:41:15: [ 在 MySql.Data.MySqlClient.NativeDriver.Open()
在 MySql.Data.MySqlClient.Driver.Open()
在 MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
在 MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
在 MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
在 MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
在 MySql.Data.MySqlClient.MySqlPool.GetConnection()
在 MySql.Data.MySqlClient.MySqlConnection.Open()
解决办法,就是,在数据库连接时加个参数:
SslMode=None
就可以完美解决。
具体原因是因为MySQL8.0以前的加密规则是mysql_native_password,
8.0之后的版本是caching_sha2_password所以导致的,除了上边的办法,还可以把这个加密规则修改一下,这个的修改方式有很多,
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';