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

解決 MySQL 遠程連線被拒:改表法、授權法與防火牆完整指南

     編輯:MySQL 綜合教學

MySQL 遠程連線「Host not allowed」錯誤:三大解決方案全解析

MySQL 預設僅允許本機連線,遠程連線會遭遇 ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed to connect to this MySQL server。本文提供三種標準解決方案,並說明防火牆與網路層面的必要配合。

方案一:改表法(直接修改 mysql.user 表)

mysql -u root -p
USE mysql;
UPDATE user SET host = '%' WHERE user = 'root';
SELECT host, user FROM user;  -- 驗證
FLUSH PRIVILEGES;

適用場景:快速開放既有 root 帳號遠程存取。風險:安全性極低,生產環境嚴禁。

方案二:授權法(GRANT 建立專用遠程帳號,推薦)

開放任意主機連線

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;

限定特定 IP 連線

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;

限定特定資料庫 + 特定 IP

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;

方案三:命令列批次執行(自動化部署適用)

mysql -h localhost -u root -p -e "
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
"

關鍵補充:網路與防火牆層面必檢項目

層面檢查項目指令/操作
MySQL 綁定位址bind-address 是否為 0.0.0.0 或具體 IPgrep bind-address /etc/my.cnf → 設為 0.0.0.0 或註解掉
埠監聽確認3306 埠是否在 LISTEN 狀態netstat -ntlp | grep 3306 或 ss -ntlp | grep 3306
系統防火牆firewalld/iptables 是否開放 3306firewall-cmd --add-port=3306/tcp --permanent && firewall-cmd --reload
雲端安全群組AWS SG / Azure NSG / GCP Firewall 是否允許入站 3306控制台配置入站規則:來源 IP/範圍、通訊協定 TCP、埠 3306
SELinux/AppArmor是否阻擋 mysqld 網路連線getsebool -a | grep mysql、aa-status

完整排查流程圖

  1. 確認 MySQL 服務運行:systemctl status mysqld
  2. 確認監聽位址:bind-address = 0.0.0.0 並重啟服務
  3. 建立遠程帳號:使用方案二 GRANT ... TO 'user'@'%' ...
  4. 執行 FLUSH PRIVILEGES
  5. 驗證本機連線:mysql -u user -p -h 127.0.0.1
  6. 驗證遠程連線:mysql -u user -p -h server_ip
  7. 若遠程失敗 → 檢查防火牆/安全群組/SELinux

安全最佳實務

  • ❌ 禁止 root@%,✅ 建立專用帳號 app_user@%
  • ❌ 禁止 GRANT ALL ON *.*,✅ 限定 GRANT SELECT,INSERT,UPDATE ON app_db.*
  • ❌ 禁止密碼明文傳輸,✅ 啟用 SSL 連線 (REQUIRE SSL)
  • ✅ 定期審計 SELECT host, user FROM mysql.user
  • ✅ 變更預設埠 3306 → 非標準埠 (如 3307)

遵循「授權法 + 網路層防護 + 最小權限」三位一體策略,即能安全、穩定地解決 MySQL 遠程連線需求。

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