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

MySQL 遠程登錄失敗解決:GRANT 授權精確匹配 host 原則

     編輯:MySQL 綜合教學

MySQL 遠程登錄失敗解決:GRANT 授權精確匹配 host 原則

現象:本機能連,遠程報 ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed to connect。本質:MySQL 權限系統以 user@host 為唯一鍵,host 必須精確匹配客戶端來源 IP/主機名。

核心授權語句


GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
子句含義
ALL PRIVILEGES所有權限(除 GRANT OPTION)
ON *.*所有庫所有表
TO 'myuser'@'%'用戶 myuser,允許任意主機(%)連接
IDENTIFIED BY 'mypassword'設置密碼
WITH GRANT OPTION允許該用戶再授權

host 匹配規則實例

授權 host允許連接來源典型場景
localhostUnix socket / 127.0.0.1本機腳本、本地開發
127.0.0.1TCP 回環本機應用走 TCP
192.168.1.100單一 IP固定應用服務器
192.168.1.%網段內網應用集群
%任意 IP測試/多雲環境(生產慎用)
%.example.com域名後綴(需 DNS 反解)動態 IP 機器

常見誤區

  1. 以為 root 默認能遠程:默認僅創建 root@localhost 和 root@127.0.0.1,無 root@%。
  2. 授權用 %,但客戶端走 IPv6:MySQL 解析 IPv6 為 ::ffff:192.168.1.1,需額外授權 user@'::1' 或啟用 bind-address=::。
  3. 改表法修改 host 列:5.7+ mysql.user 表結構變化(authentication_string 替代 password),直接 UPDATE 易導致權限表損壞,務必用 GRANT/CREATE USER/ALTER USER。

完整排查清單


# 1. 確認 bind-address 已開放
grep bind-address /etc/my.cnf
netstat -ntlp | grep 3306

# 2. 確認賬號存在且 host 匹配
SELECT user, host, plugin FROM mysql.user WHERE user='myuser';

# 3. 確認權限
SHOW GRANTS FOR 'myuser'@'%';

# 4. 確認防火牆/安全組放行 3306
telnet  3306

# 5. 客戶端測試
mysql -h  -u myuser -p'mypassword'

生產環境建議

  • 業務賬號 禁止 %,按應用服務器 CIDR 授權:GRANT ... TO 'app'@'10.0.%'。
  • 配合 REQUIRE SSL 強制加密傳輸。
  • 啟用 validate_password 強密碼策略 + 定期輪換。
  • 審計日誌記錄所有登入嘗試(成功/失敗)。

「權限按 host 精確匹配」是 MySQL 安全模型基石,授權時像配置防火牆規則一樣嚴謹,遠程登錄問題自然迎刃而解。

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