MySQL 遠端連線被拒「Host not allowed」三大解法
現象
Host '60-248-32-13.HINET-IP.hinet.net' is not allowed to connect to this MySQL server
方法一:GRANT 明確授權指定 IP/主機名(標準做法)
mysql -u root -p
USE mysql;
-- 授權特定資料庫、特定 IP
GRANT SELECT,INSERT,UPDATE,DELETE ON db_name.* TO 'username'@'60-248-32-13.HINET-IP.hinet.net' IDENTIFIED BY 'password';
-- 或授權所有權限
UPDATE user SET
Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y',
Create_priv='Y', Drop_priv='Y', Reload_priv='Y', Shutdown_priv='Y',
Process_priv='Y', File_priv='Y', Grant_priv='Y', References_priv='Y',
Index_priv='Y', Alter_priv='Y', Show_db_priv='Y', Super_priv='Y',
Create_tmp_table_priv='Y', Lock_tables_priv='Y', Execute_priv='Y',
Repl_slave_priv='Y', Repl_client_priv='Y'
WHERE User='username';
FLUSH PRIVILEGES;
方法二:建立通用遠端帳號(開發/測試環境適用)
-- 1. 建立帳號允許任意主機(%)
GRANT SELECT,UPDATE,INSERT,DELETE ON *.* TO 'xuys'@'%' IDENTIFIED BY 'xuys1234';
-- 2. 確認 user 表
USE mysql;
SELECT Host, User, Password FROM user;
-- 3. 重新載入權限(必要步驟)
mysqladmin -u root -p reload
# 或服務重啟
/etc/rc.d/init.d/mysqld restart
-- 4. 若仍失敗,檢查 db 表是否有對應記錄
INSERT INTO db VALUES ('192.168.88.234', '%', 'xuys', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
UPDATE db SET Host='%' WHERE User='xuys';
# 再次 reload
方法三:phpMyAdmin 連線遠端資料庫設定
-- 1. 遠端建立帳號
GRANT SELECT,UPDATE,INSERT,DELETE ON *.* TO 'sss'@'%' IDENTIFIED BY 'sss';
UPDATE user SET Host='%' WHERE User='sss';
FLUSH PRIVILEGES;
-- 2. 重啟 MySQL
mysqladmin -u root -p reload
mysqladmin -u root -p shutdown
/etc/rc.d/init.d/mysqld start
-- 3. 修改 phpMyAdmin config.inc.php
$cfg['Servers'][$i]['host'] = '遠端IP';
$cfg['Servers'][$i]['user'] = 'sss';
$cfg['Servers'][$i]['password'] = 'sss密碼';
-- 注意:GRANT ALL PRIVILEGES 不包含 GRANT 權限,需額外:
UPDATE user SET Grant_priv='Y' WHERE User='sss';
核心原則
- **生產環境嚴禁使用
%**,務必限定具體 IP/網段
- 權限變更後**必須
FLUSH PRIVILEGES 或 reload** 生效
- 防火牆/安全組需同步開放 3306 埠
- 啟用 SSL 加密傳輸保護資料機密性