[转帖]無法遠端連接MySQL:message from server_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2358 | 回复: 0   主题: [转帖]無法遠端連接MySQL:message from server        下一篇 
redalert
注册用户
等级:新兵
经验:66
发帖:8
精华:0
注册:1970-1-1
状态:离线
发送短消息息给redalert 加好友    发送短消息息给redalert 发消息
发表于: IP:您无权察看 2014-11-13 9:58:26 | [全部帖] [楼主帖] 楼主

無法遠端連接MySQL:message from server: "Host xxx is not allowed to connect to this MySQL server"

通常無論我們在寫測試程式或demo,

如果要用到資料庫,我們常會使用MySQL。

為了方便起見,通常就都在本機(也就是localhost安裝一份MySQL),

使用起來倒也相安無事。

然而事情總不是這麼簡單 orz,

平常在 Java 裡再平凡也不過的一行程式碼,

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", username, password);


換作了從非本機的遠端 IP 連接,

conn = DriverManager.getConnection("jdbc:mysql://remoteIP:3306/test", username, password);


竟然死也連不上,還跳出一個訊息是:

message from server: "Host  is not allowed to connect to this MySQL server"


這到底是怎麼一回事呢?

後來查了一些資料,發現出現這種狀況都是因為想直接用 root 帳號從遠端連,

會出現錯誤訊息其實是因為 MySQL 為了安全性的因素,

所以將權限最大的 root 帳號限定只能由本機端 localhost 連到資料庫。

那要怎麼解決這種狀況呢?解決方法有兩種:

把 root 的權限開放,讓他也能從遠端連!
新建一個帳號,讓他只有所要連接的資料庫的權限,只要是非 root 帳號都可以從遠端連。
接下來針對兩種解決方法做分析,

第一種方法有點自找麻煩,就已經因為安全性的問題要把 root 帳號綁在 localhost 了,

你竟然還要找死把權限開放,如果不是什麼程式已經寫死的問題的話,

真的很不建議這麼做。

就算真的要這麼做,也請把要開放的 remoteIP 範圍設定好,

透過限定適當的 IP 範圍,也可避免直接被外部攻擊。

要開放帳號連接權限的方式如下:

shell> mysql --user=root -p


輸入密碼

 mysql> use mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON [db_name].* TO [username]@[remoteIP] identified by '[password]';
mysql> FLUSH PRIVILEGES;


其中幾項參數名稱的說明如下:

db_name:想要從遠端連接的資料庫名稱
username:就是 username 嘛,若你是遇上這個問題,這個通常就是 root 囉!
remoteIP:用戶或程式所在的遠端 IP,這邊可以使用 % 來開放某個網段,如:'192.168.%.%',注意兩個單引號是一定要加的喔!
password:就密碼啦,最好也加上兩邊的單引號。
最後的最後記得加上 ; 因為這是SQL語法。
以上的方法是參考自:

mysql:无法远程登入mysql server 的解决办法
报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost

第二種方法則是新建一個帳號,

方式可以用 MySQL 的圖形介面或是參考以下的教學:

shell> mysql --user=root -p


輸入密碼

 mysql> use mysql
mysql> GRANT ALL ON db_name.table_name TO newUserName@remoteIP identified by 'password';
mysql> FLUSH PRIVILEGES;


語法和前一個很像,db_name.table_name 可改成 db_name.* 甚至是 *.*,

這樣就能產生一個新的使用者且對 ALL (SELECT, UPDATE, DELETE......) 的操作有權限了。

以上方法參考自:

MySQL 新增使用者與權限設定 (筆記)
[技術文章] MySQL 指令、語法及管理
不管使用了哪種方法,現在應該都可以正常地連上資料庫了,

無論是哪種方法,記得盡量把權限和 IP 的範圍縮小,

以達到最高的安全性喔!

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论