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 連線。
mysql -u root -p
-- 建立用戶,允許從 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;
SELECT host, user FROM mysql.user WHERE user = 'app_user';
-- 應顯示 192.168.1.100 | app_user
CREATE USER 'dev_user'@'%' IDENTIFIED BY 'DevP@ssw0rd!';
GRANT ALL PRIVILEGES ON devdb.* TO 'dev_user'@'%';
FLUSH PRIVILEGES;
⚠️ 生產環境嚴禁使用 %,會暴露資料庫於全網暴力破解風險。
USE mysql;
UPDATE user SET host = '%' WHERE user = 'existing_user' AND host = 'localhost';
FLUSH PRIVILEGES;
同樣有安全風險,僅限內網受控環境。
# my.cnf / my.ini [mysqld] 區段
bind-address = 0.0.0.0
# 重啟生效
systemctl restart mysqld
# firewalld (CentOS 7+)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# SELinux 允許 mysqld 連網
setsebool -P mysql_connect_any 1
# 或設定 port 標籤
semanage port -a -t mysqld_port_t -p tcp 3306
修改 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';
host 為**應用伺服器實際 IP** 或 CIDR 區段 (MySQL 8.0 支援 CIDR:'app_user'@'192.168.1.0/24')REQUIRE SSL 於 GRANT 子句)mysql.user,移除無用帳號UPDATE mysql.user SET host='localhost' WHERE user='root';)| 現象 | 檢查項目 |
|---|---|
| Connection refused | mysqld 是否運行?bind-address?防火牆? |
| Access denied | 帳號/密碼正確?host 符合?FLUSH PRIVILEGES? |
| SSL connection error | 客戶端/伺服器 SSL 設定一致?CA 憑證有效? |
| Authentication plugin error | MySQL 8.0 預設 caching_sha2_password,舊客戶端需指定 mysql_native_password |