首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL「Host is not allowed to connect」錯誤三種解決方案:改表法、授權法、跳過授權表法

     編輯:MySQL 綜合教學

錯誤原因

mysql.user 表中 Host 欄位限制登入來源,預設 root@localhost 僅允許本機。

方案一:改表法(需本機登入)


mysql -u root -p
USE mysql;
UPDATE user SET Host = '%' WHERE User = 'root';
FLUSH PRIVILEGES;
SELECT Host, User FROM user;

將 Host 改為 % 允許任意 IP。

方案二:授權法(推薦,可遠程操作)


-- 允許 myuser 從任意 IP 以 mypassword 登入所有庫
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 限定特定 IP
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 限定特定庫
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;

方案三:跳過授權表法(緊急重置密碼/權限)

  1. my.cnf [mysqld] 加 skip-grant-tables
  2. 重啟 MySQL
  3. 無密碼登入:mysql
  4. 修復權限/密碼:
    
    USE mysql;
    UPDATE user SET authentication_string=PASSWORD('newpass') WHERE User='root';
    FLUSH PRIVILEGES;
    
  5. 移除 skip-grant-tables,重啟

常見坑

  • 改完表/授權忘記 FLUSH PRIVILEGES; 不生效
  • MySQL 8.0 密碼欄位為 authentication_string,非 password
  • skip-grant-tables 期間任何人可無密碼登入,務必最短時間完成並移除

總結

日常用 授權法 最規範;忘記密碼用 跳過授權表法;老舊系統快速改用 改表法。生產環境嚴禁 root@%,建立專用帳號、限定 IP、最小權限。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved