不能使用MySQLConnection连接到MySQL数据库

本文关键字:MySQL 数据库 连接 MySQLConnection 不能 | 更新日期: 2023-09-27 18:10:25

我正在使用MySqlConnection类连接到本地MySQL数据库:

SourceHost = ConfigurationManager.AppSettings["sourceHost"];
SourceDatabase = ConfigurationManager.AppSettings["sourceDatabase"];
SourceUsername = ConfigurationManager.AppSettings["sourceUsername"];
SourcePassword = ConfigurationManager.AppSettings["sourcePassword"];
SourceString = String.Format("Server={0};Database={1};UID={2};Password={3};", SourceHost, SourceDatabase, SourceUsername, SourcePassword);
var sqlSourceConnection = new MySqlConnection(SourceString);
sqlSourceConnection.Open();

这些是App.config文件

中的值
<add key="sourceHost" value="myHost" />
<add key="sourceDatabase" value="myDB" />
<add key="sourceUsername" value="myUSer" />
<add key="sourcePassword" value="myPSW" />
<add key="sourceDbType" value="mysql" />

我得到的错误是说:访问拒绝为用户myUser@myHost.myDomain使用密码:是的,但通过使用myUser和myPSW凭证,我可以从命令提示符登录。

怎么了?

编辑:当我将sourceHost更改为

时,它工作了
<add key="sourceHost" value="localhost" />

不能使用MySQLConnection连接到MySQL数据库

用户myUser只能从本地主机授权。
您需要为您的主机名授权myUser。

GRANT ALL PRIVILEGES ON *.* to 'myUser'@'%' WITH GRANT OPTION;

GRANT ON *.* TO 'myUser'@'myHost.myDomain' IDENTIFIED BY 'password' ;

或者

GRANT ON *.* TO 'myUser'@'%.myDomain' IDENTIFIED BY 'password' ;

标准

Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

指定TCP端口

Server=myServerAddress;Port=1234;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

端口3306是MySql的默认端口。如果使用Unix套接字,则忽略该值。

当您尝试SHOW GRANTS时,您应该看到这样的行:

mysql> SHOW GRANTS;
+-----------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'myUSer'@'localhost' WITH GRANT OPTION |
+-----------------------------------------------------------------------+

注意localhost,所以这在连接中发生:

  • 连接localhost时系统自动使用127.0.0.1作为连接源地址。
  • 但是当你连接到10.0.0.1时,它使用10.0.0.1作为你的源地址。

试试ping -S:

C:'>ping localhost -S 127.0.0.1
Pinging localhost [127.0.0.1] from 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
C:'>ping localhost -S 10.0.0.1
Pinging localhost [127.0.0.1] from 10.0.0.1 with 32 bytes of data:
PING: transmit failed. General failure.
C:'>ping 10.0.0.1 -S 10.0.0.1
Pinging 10.0.0.1 from 10.0.0.1 with 32 bytes of data:
Reply from 10.0.0.1: bytes=32 time<1ms TTL=128
C:'>ping 10.0.0.1 -S 127.0.0.1
Pinging 10.0.0.1 from 127.0.0.1 with 32 bytes of data:
PING: transmit failed. General failure.

所以它适用于localhost,因为localhost是一个允许的源主机,而它不适用于your_host,因为10.0.0.1不是一个允许的主机。

只要将您的用户的权限授予10.0.0.1,它应该工作(也许您将不得不更改防火墙设置),或允许所有连接从外部(使用%作为主机)。