不能使用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" />
用户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
,它应该工作(也许您将不得不更改防火墙设置),或允许所有连接从外部(使用%
作为主机)。