我对网络应用非常陌生,所以如果问题是由天真造成的,我深表歉意,然而,我完全不知所措。
我有一个基本的ASP。net core MVC应用程序运行在Apache2后面的Ubuntu20.4服务器上,每当该应用程序收到请求时,Mysqlclient返回一个异常:
MySql.Data.MySqlClient.MySqlException (0x80004005): Authentication to host '' for user '' using method 'sha256_password' failed with message: Access denied for user ''@'{the requesting IP}' (using password: NO)
我希望传递给客户机的连接字符串实际上是与所有正确参数一起传递的,这些参数已在我的本地计算机(Win10)上测试过。这两种方法都是通过运行MySQL的本地实例和远程连接到ubuntu服务器上的MySQL服务器,两种实例都能正常运行。
我唯一的假设是,MysqlClient试图以某种方式使用“@”{My IP}的网页请求者凭据,这显然会导致访问被拒绝,但我不确定这是如何发生的或为什么发生的。
我的连接字符串是:
"SERVER=127.0.0.1; DATABASE=somedb; UID=someuser; PASSWORD=SomePassword;"
然后,我的连接请求是通过以下内容发出的,而不需要对默认的MySqlConnection对象进行任何修改:
private static MySqlConnection dbConnection;
dbConnection = new MySqlConnection(connectionString);
我从应用程序中得到的错误有:
fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
An unhandled exception has occurred while executing the request.
MySql.Data.MySqlClient.MySqlException (0x80004005): Authentication to host '' for user '' using method 'sha256_password' failed with message: Access denied for user ''@'{my IP}' (using password: NO)
---> MySql.Data.MySqlClient.MySqlException (0x80004005): Access denied for user ''@'{my IP}' (using password: NO)
at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
at MySql.Data.MySqlClient.NativeDriver.ReadPacket()
at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.ReadPacket()
at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.AuthenticationFailed(Exception ex)
at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.ReadPacket()
at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.ContinueAuthentication(Byte[] data)
at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.HandleAuthChange(MySqlPacket packet)
at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.Authenticate(Boolean reset)
at MySql.Data.MySqlClient.NativeDriver.Authenticate(String authMethod, Boolean reset)
at MySql.Data.MySqlClient.NativeDriver.Open()
at MySql.Data.MySqlClient.Driver.Open()
at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlConnection.Open()