現象
Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server
方案一:標準 GRANT 授權(推薦)
-- 登入 MySQL
mysql -u root -p
-- 1. 創建用戶並授權(任意主機)
GRANT SELECT, INSERT, UPDATE, DELETE ON db_name.* TO 'username'@'%' IDENTIFIED BY 'password';
-- 2. 或限定特定 IP
GRANT SELECT, INSERT, UPDATE, DELETE ON db_name.* TO 'username'@'192.168.88.234' IDENTIFIED BY 'password';
-- 3. 刷新權限
FLUSH PRIVILEGES;
-- 4. 驗證
USE mysql; SELECT host, user, password FROM user;
% 通配所有主機,開發環境可用,生產建議限定 IP。
- 權限按需分配,避免
GRANT ALL。
方案二:改表法(直接操作 mysql.user,風險高)
UPDATE user SET host = '%' WHERE user = 'username';
FLUSH PRIVILEGES;
- 繞過權限系統邏輯,易導致權限不一致。
- 若需全權限,需手動置位所有
_priv 列為 'Y',極易遺漏。
- 不推薦生產使用。
方案三:phpMyAdmin 遠程管理配置
- MySQL 執行授權並
UPDATE user SET host='%' WHERE user='admin_user';、FLUSH PRIVILEGES;
- 重載/重啟:
mysqladmin -u root -p reload
mysqladmin -u root -p shutdown
/etc/rc.d/init.d/mysqld start
- 修改
config.inc.php:
$cfg['Servers'][$i]['host'] = '遠程IP';
$cfg['Servers'][$i]['user'] = 'admin_user';
$cfg['Servers'][$i]['password'] = '密碼';
補充:db 表授權(舊版 MySQL 兼容)
USE mysql;
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Create_tmp_table_priv, Lock_tables_priv)
VALUES ('192.168.88.234', '%', 'username', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
UPDATE db SET Host='%' WHERE User='username';
FLUSH PRIVILEGES;
關鍵注意事項
GRANT ALL 不包含 GRANT OPTION,需額外 UPDATE user SET Grant_priv='Y' WHERE user='...';
- 修改權限後必須
FLUSH PRIVILEGES 或 mysqladmin reload。
- 生產環境:限定 IP + 強密碼 + SSL + 防火牆白名單 四層防護。
- 避免使用
root 遠程登入,建立專用運維/應用賬號。