C# Can';t使用MySQLConnection连接到MySQL数据库
我正在使用MySqlConnection类连接到本地MySQL数据库:C# Can';t使用MySQLConnection连接到MySQL数据库,c#,mysql,C#,Mysql,我正在使用MySqlConnection类连接到本地MySQL数据库: SourceHost = ConfigurationManager.AppSettings["sourceHost"]; SourceDatabase = ConfigurationManager.AppSettings["sourceDatabase"]; SourceUsername = ConfigurationManager.AppSettings["sourceUsername"]; SourcePassword
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'@'%.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套接字,该值将被忽略。当您尝试时,您应该看到这样一行:
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
C:\>pinglocalhost-s127.0.0.1
使用32字节的数据从127.0.0.1 ping localhost[127.0.0.1]:
来自127.0.0.1的回复:bytes=32 timeping localhost-s10.0.0.1
使用32字节的数据从10.0.0.1 ping localhost[127.0.0.1]:
PING:传输失败。普遍失败。
C:\>ping 10.0.0.1-S 10.0.0.1
使用32字节数据从10.0.0.1 ping 10.0.0.1:
来自10.0.0.1的回复:字节数=32次计时10.0.0.1-S 127.0.0.1
使用32字节数据从127.0.0.1 ping 10.0.0.1:
PING:传输失败。普遍失败。
因此它适用于localhost
,因为localhost
是允许的源主机,而它不适用于您的\u主机
,因为10.0.0.1
不是允许的主机
只需将您的用户权限授予
10.0.0.1
,它就会工作(可能您必须更改防火墙设置),或者允许从外部进行所有连接(使用%
作为主机)。您是否在命令行上尝试的同一主机上运行代码?请检查端口。MySQL通常将端口定义为3306,但是如果您更改了端口,或者正在使用另一个发行版(例如,MariaDB),则凭据将崩溃。其他解决方案:检查您的用户是否有权读取您的数据库。@mable是的,我正在从命令行运行它。我检查了数据库,它正在使用端口3306。我尝试登录的用户是root。当我用localhost替换机器名时,它开始工作。我认为它试图使用某种形式的域身份验证,而不是SQL登录。
mysql> SHOW GRANTS;
+-----------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'myUSer'@'localhost' WITH GRANT OPTION |
+-----------------------------------------------------------------------+