[英]Can't connect to MySQL database using MySQLConnection
我正在使用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
作為源地址。 只需嘗試使用-S
ping :
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
特權,它就可以工作(也許您必須更改防火牆設置),或者允許外部的所有連接(使用%
作為主機)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.