發現問題
使用Navicat連接MySql數據庫時,未能成功,提示信息如下圖:
這個錯誤提示已經很明確了,"不允許主機'desktop-teat9ob'連接到此mysql服務器",知道問題所在就好解決了。
解決辦法
我們遠程聯接到MySql服務器,打開服務器本地Navicat軟件,在查詢編輯器中執行下面的SQL語句
#查詢允許連接的主機及用戶信息 select Host,User,Password from mysql.user;
結果如下圖:
從結果中可以看到,MySql只允許使用root用戶從localhost,127.0.0.1和::1主機上進行連接,也就是只能從本機連接。
注:::1 是Ipv6地址127.0.0.1的縮寫,也就是本機。
我們使用SQL語句將::1改為%,
update mysql.user set `Host` = '%' where `Host` = '::1' and User = 'root';
執行結果:
[SQL] update mysql.user set `Host` = '%' where `Host` = '::1' and User = 'root'; 受影響的行: 1 時間: 0.000ms
然后查詢user表,查看結果:
可以看到,已經將::1改為了%,%表示匹配所有host的主機的,開放此權限,會增加MySql的風險,請根據實際情況而定!
執行下面的SQL,使上面的改動生效,否則仍然聯接不上
flush privileges;
執行結果如下:
[SQL] flush privileges; 受影響的行: 0 時間: 0.003ms
此時,我們再用Navicat連接MySql服務器,提示成功,如下圖:
問題解決。
補充
如果你想允許用戶root從ip為192.168.0.8的主機連接到MySql服務器,並使用123456作為密碼,可以執行下面的SQL語句:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.8' IDENTIFIED BY '123456' WITH GRANT OPTION; #執行下面的語句,使上面的改動生效 FLUSH PRIVILEGES;
如果你想允許用戶root從ip為192.168.0.8的主機連接到MySql服務器的testdb數據庫,並使用123456作為密碼
GRANT ALL PRIVILEGES ON testdb.* TO 'root'@'192.168.0.8' IDENTIFIED BY '123456' WITH GRANT OPTION; #執行下面的語句,使上面的改動生效 FLUSH PRIVILEGES;