簡體   English   中英

無法使用MySQLConnection連接到MySQL數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM