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

MySQL 遠程登入被拒「Host not allowed」三大解決方案:GRANT 授權、改表法、phpMyAdmin 配置全攻略

     編輯:MySQL 資料庫相關知識

現象


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 遠程管理配置

  1. MySQL 執行授權並 UPDATE user SET host='%' WHERE user='admin_user';、FLUSH PRIVILEGES;
  2. 重載/重啟:
    mysqladmin -u root -p reload
    mysqladmin -u root -p shutdown
    /etc/rc.d/init.d/mysqld start
  3. 修改 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 遠程登入,建立專用運維/應用賬號。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved