如果要用到資料庫,我們常會使用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 的圖形介面或是參考以下的教學:
- 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......) 的操作有權限了。
以上方法參考自:
不管使用了哪種方法,現在應該都可以正常地連上資料庫了,
無論是哪種方法,記得盡量把權限和 IP 的範圍縮小,
以達到最高的安全性喔!
關鍵字:MySQL, Java, 錯誤, 無法連接, 連不上, Host, 遠端, IP
參考資料:
相关推荐
Host 主机名 is not allowed to connect the mysql server 原因:没有授权远程访问mysql 解决方法: cmd 中运行mysql -u root -p(如果报mysql 不是内部或外部命令,找到安装mysql对应的bin文件夹运行mysql.exe,...
java.sql.SQLException: null, message from server: “Host ‘223.72.41.7’ is not allowed to connect to this MySQL server” 客户端访问时报错: 解决方法: 1,登陆服务器 mysql> use mysql; //用mysql ...
NULL 博文链接:https://rayoo.iteye.com/blog/1973032
message from server: “Host ‘****’ is not allowed to connect to this MySQL server 1:在登录mysql服务器 2:执行:GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ WITH GRANT OPTION //赋予任何主机访问数据的...
"Host 'localhost' is not allowed to connect to this MySQL server" 的原因及解决办法
ERROR 1130 (HY000): Host ‘localhost’ is not allowed to connect to this MySQL server www.jb51.net 出现原因: mysql只有一个root用户,修改root密码后选了MD5,提交后,重新 登陆出现“Host ‘localhost’ is...
如果你想连接你的mysql的时候发生这个错误: 代码如下: ERROR 1130: Host ‘192.168.1.3’ is not allowed to connect to this MySQL server 解决方法: 1。 改表法。可能是你的帐号不允许从远程登陆,只能在...
NULL 博文链接:https://yizhilong28.iteye.com/blog/1137285
1、进入mysql的安装目录,在bin文件中打开CMD 2、输入 mysql -uroot -p 3、然后输入mysql密码 4、选择你使用的数据库,use use mysql 5、让用户‘root ’使用密码‘123456’能够从任何主机远程连接到mysql ...
报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用l
前言 ...看起来像是没办法访问到数据库连接的...ERROR 1130: Host *.*.*.* is not allowed to connect to MySQL 看到这个错误后,上网一查,基本上有挺多解决方案,但是为什么还要专门写一下呢? 答案是:网上很多都是my
Android WebView 报 Not allowed to load local resource错误的解决办法 博客地址:http://blog.csdn.net/yuzhiqiang_1993/article/details/76228541
设置隐试打开PPT报错 Hiding the application window is not allowed
授权法,介绍远程用户连接mysql数据库,给任意远程主机授权访问mysql server的权限。
最近在学习Django框架,于是在windows系统上搭建了Django环境,并使用虚拟机ubuntu系统上安装的mysql作为项目的远程数据库,前几天一直用得好好的,今天在虚拟机上连接数据库时,出现了如下错误: 本地数据库没法...
With exercises in each chapter to help you apply what you’ve learned, all you need is programming experience to get started. Explore the machine learning landscape, particularly neural nets Use ...
MySQL导入sql脚本错误:2006 – MySQL server has gone away 到如一些小脚本很少报错,但最近导入一个10+M的SQL脚本,却重复报错: Error occured at:2014-03-24 11:42:24 Line no.:85 Error Code: 2006 - MySQL ...
解决办法:mysql 出现Host 'localhost' is not allowed to connect to this MySQL server 错误。
Host 'Local' is not allowed to connect to this MySQL server 的解决方法,需要的朋友可以参考一下