首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 客戶端連接遠程服務器「Host not allowed」完整排查與授權指南

     編輯:MySQL 綜合教學

遠程連接被拒核心原因:用戶 Host 欄位不匹配

MySQL 用戶以 'user'@'host' 識別,host 決定允許連接的來源 IP/主機名。預設 root@localhost 僅允許本地連接。

標準授權流程


-- 1. 登入 MySQL (本地或已授權主機)
mysql -u root -p

-- 2. 創建遠程訪問用戶 (指定 IP)
CREATE USER 'kay'@'192.168.1.8' IDENTIFIED BY 'kaypass';
GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO 'kay'@'192.168.1.8';

-- 3. 或允許任意 IP (開發環境)
CREATE USER 'kay'@'%' IDENTIFIED BY 'kaypass';
GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO 'kay'@'%';

-- 4. 刷新權限 (5.7 前必執行)
FLUSH PRIVILEGES;

驗證用戶表


USE mysql;
SELECT Host, User, authentication_string FROM user WHERE User='kay';
-- 應看到 kay | % (或具體 IP)

修改現有用戶 Host (慎用)


UPDATE user SET Host='%' WHERE User='kay' AND Host='192.168.1.8';
FLUSH PRIVILEGES;

若仍無法連接,排查清單

  1. 防火牆:Server 3306 端口對 Client IP 放行。
    iptables -A INPUT -s 192.168.1.8 -p tcp --dport 3306 -j ACCEPT
  2. MySQL 綁定地址:my.cnf bind-address = 0.0.0.0 (或具體內網 IP),不能是 127.0.0.1。修改後重啟。
  3. SELinux/AppArmor:setsebool -P mysql_connect_any=1 或調整策略。
  4. skip-name-resolve:my.cnf 加入 skip-name-resolve=1 禁用 DNS 反解,加速連接並避免主機名解析失敗。
  5. SSL/TLS:若強制 SSL,Client 需提供憑證;否則 REQUIRE NONE。

備用方案:db 表授權 (舊版本兼容)


USE mysql;
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv)
VALUES ('192.168.88.234', '%', 'xuys', 'Y','Y','Y','Y');
FLUSH PRIVILEGES;

現代版本優先使用 GRANT,db 表屬於舊權限體系殘留。

連接測試


# Client 端
mysql -h 192.168.1.100 -u kay -p kaypass -e "SELECT 1;"
# 或 GUI 工具填入 Host/IP、User、Password、Port=3306

遠程連接授權示意

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved