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

MySQL 遠程訪問權限配置雙法:修改 user 表 Host 欄位 vs GRANT 授權語句

     編輯:MySQL 綜合教學

MySQL 遠程訪問權限配置雙法:修改 user 表 Host 欄位 vs GRANT 授權語句

背景

預設 MySQL 僅允許 localhost 本機連線。應用與資料庫分離部署時,需開啟遠程訪問權限。


方法一:改表法(直接修改 mysql.user 表)

適用於已有帳號,需快速開放所有主機存取。

mysql -u root -p
mysql> USE mysql;
mysql> UPDATE user SET host = '%' WHERE user = 'root';
mysql> SELECT host, user FROM user;  -- 驗證
mysql> FLUSH PRIVILEGES;

缺點: 粒度粗暴,將 root 開放給全網,安全風險極高,**生產環境嚴禁對 root 使用此法**。


方法二:授權法(GRANT 語句,推薦)

遵循最小權限原則,建立專用遠程帳號,精確控制主機、資料庫、權限。

步驟

  1. 登入本機 MySQL:
    mysql -h localhost -u root -p
  2. 授權任意主機訪問所有庫表:
    GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
  3. 或限定特定 IP:
    GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
  4. 或限定特定資料庫:
    GRANT SELECT,INSERT,UPDATE,DELETE ON mydb.* TO 'appuser'@'192.168.1.100' IDENTIFIED BY 'apppass';
  5. 刷新權限生效:
    FLUSH PRIVILEGES;
  6. 退出:
    EXIT;

驗證遠程連線

# 遠程機器測試
mysql -h 192.168.1.50 -u myuser -p
Enter password: mypassword

安全加固建議

  • 禁用 root 遠程登入: UPDATE mysql.user SET host='localhost' WHERE user='root'; FLUSH PRIVILEGES;
  • 按業務拆分帳號: 唯讀帳號、讀寫帳號、管理帳號分離
  • 限定來源 IP: 避免使用 '%',改用具體應用伺服器 IP 或 CIDR 範圍 (MySQL 8.0+ 支援 '192.168.1.%')
  • 啟用 SSL: REQUIRE SSL 強制加密傳輸
  • 防火牆層面限制: 僅允許應用伺服器 IP 存取 3306 埠
  • 定期輪換密碼: 建立密碼策略與輪換機制

常見坑點

現象原因解決
ERROR 1130 (HY000): Host not allowed帳號 Host 欄位不匹配檢查 SELECT host,user FROM mysql.user;,確認有對應 % 或具體 IP
連線逾時防火牆/安全組阻擋 3306雲端控制台/本機防火牆放行埠
SSL 連線失敗啟用 SSL 但客戶端未配置憑證客戶端加 --ssl-mode=DISABLED 或配置 CA 憑證

採用 GRANT 授權法配合網路層防火牆,才是生產環境開啟遠程訪問的正確姿勢。

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