昨天在虛擬機上搭建web項目環境時,想在主機上使用navicat訪問虛擬機上的mysql數據庫,報錯大概是“hostxxx is not allowed to this mysql server”;
於是就檢查防火牆,是關閉的,檢查網絡模式,是橋接模式,虛擬機也能和主機ping通。。。emmm那怎么辦呢
參看之前項目的安裝文檔,發現自己遺漏了這么兩句配置:
cmd進入mysql,輸入:
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
(這表示賦予任何主機訪問數據的權限,其中*.*表示可以訪問mysql server上的任意數據庫(全局權限),如果替換成a.*,即表示可以訪問mysql server上的a數據庫啦(表權限);
其中%可以替換為具體的ip地址,如192.168.12.80,表示賦予該主機訪問虛擬機mysql server的權限)
再輸入:
FLUSH PRIVILEGES;
(這表示刷新MySQL的系統權限相關表,如果授權之后不加這條命令,上面的授權就無法立即生效,除非重啟mysql server)
這里還有一些補充問題,例如:flush privileges這條命令什么情況下需要執行;賦予權限之后如何撤回權限;
在博客園發現了一位大佬總結的相關解釋:https://www.cnblogs.com/gaosf/p/11189090.html
實踐發現:
1、賦予全局權限后,命令是立即生效的,接下來創建的連接都可以使用新的權限,因此不需要再執行FLUSH PRIVILEGES;
2、取消權限:revoke all privileges on *.* from 'username'@'%';
1)如果是新建的連接,可以看到因權限不足產生的臨時庫
2)如果是已存在的連接,取消授權后,訪問數據庫中的表,會報錯:
2019/10/8
防火牆未關閉的報錯:
暫時的解決辦法:
service iptables stop 關閉防火牆,設置后即時生效,重啟后會復原
查看防火牆狀態 service iptables status
永久的解決方法:
chkconfig iptables off 關閉防火牆,設置后重啟生效,重啟后不復原