首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 遠端連線拒絕?三大解決方案徹底搞定 Host not allowed 錯誤

     編輯:MySQL 資料庫相關知識

錯誤現象

ERROR 1130 (HY000): Host '60-248-32-13.HINET-IP.hinet.net' is not allowed to connect to this MySQL server

根本原因:MySQL 權限系統以 user@host 為鍵,預設只允許 localhost 或特定 IP 連線。

方案一:建立遠端專用帳號 + 授權 (標準做法)

步驟 1:登入本機 root

mysql -u root -p

步驟 2:建立帳號並授權特定資料庫

-- 建立用戶,允許從 192.168.1.100 連線
CREATE USER 'app_user'@'192.168.1.100' IDENTIFIED BY 'StrongP@ssw0rd!';

-- 授權特定資料庫完整權限
GRANT ALL PRIVILEGES ON mydb.* TO 'app_user'@'192.168.1.100';

-- 或僅授權讀寫
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'192.168.1.100';

-- 套用權限
FLUSH PRIVILEGES;

步驟 3:驗證

SELECT host, user FROM mysql.user WHERE user = 'app_user';
-- 應顯示 192.168.1.100 | app_user

方案二:萬用字元 % 允許任意 IP (開發/測試環境)

CREATE USER 'dev_user'@'%' IDENTIFIED BY 'DevP@ssw0rd!';
GRANT ALL PRIVILEGES ON devdb.* TO 'dev_user'@'%';
FLUSH PRIVILEGES;

⚠️ 生產環境嚴禁使用 %,會暴露資料庫於全網暴力破解風險。

方案三:修改現有用戶 host 欄位 (快速修復)

USE mysql;
UPDATE user SET host = '%' WHERE user = 'existing_user' AND host = 'localhost';
FLUSH PRIVILEGES;

同樣有安全風險,僅限內網受控環境。

必要配套檢查 (常被忽略)

1. 確認 mysqld 監聽 0.0.0.0 (非 127.0.0.1)

# my.cnf / my.ini [mysqld] 區段
bind-address = 0.0.0.0
# 重啟生效
systemctl restart mysqld

2. 防火牆開放 3306 埠

# firewalld (CentOS 7+)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

# iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

3. SELinux / AppArmor (如啟用)

# SELinux 允許 mysqld 連網
setsebool -P mysql_connect_any 1
# 或設定 port 標籤
semanage port -a -t mysqld_port_t -p tcp 3306

進階:phpMyAdmin 連線遠端資料庫

修改 config.inc.php:

$cfg['Servers'][$i]['host'] = '192.168.1.200'; // 遠端 DB IP
$cfg['Servers'][$i]['user'] = 'remote_user';
$cfg['Servers'][$i]['password'] = 'RemoteP@ssw0rd!';
$cfg['Servers'][$i]['port'] = 3306;
$cfg['Servers'][$i]['connect_type'] = 'tcp';

安全最佳實務總結

  1. 建立**專用帳號**,最小權限原則 (僅授必要資料庫/操作)
  2. 限制 host 為**應用伺服器實際 IP** 或 CIDR 區段 (MySQL 8.0 支援 CIDR:'app_user'@'192.168.1.0/24')
  3. 強制 **SSL/TLS 連線** (REQUIRE SSL 於 GRANT 子句)
  4. 定期審核 mysql.user,移除無用帳號
  5. 生產環境**禁用 root 遠端登入** (UPDATE mysql.user SET host='localhost' WHERE user='root';)

故障排查清單

現象檢查項目
Connection refusedmysqld 是否運行?bind-address?防火牆?
Access denied帳號/密碼正確?host 符合?FLUSH PRIVILEGES?
SSL connection error客戶端/伺服器 SSL 設定一致?CA 憑證有效?
Authentication plugin errorMySQL 8.0 預設 caching_sha2_password,舊客戶端需指定 mysql_native_password
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved