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

MySQL 開啟遠程訪問權限的兩種經典方法詳解

     編輯:MySQL 綜合教學

MySQL 遠程訪問權限開啟:兩大經典方案深度對比

MySQL 預設僅允許本地連線,當應用與數據庫分離部署時,必須開啟遠程訪問。本文詳細對比「改表法」與「授權法」的操作步驟、優缺點、適用場景,並提供生產環境安全加固建議,助你快速落地。

一、背景與核心限制

MySQL 安裝後,mysql.user 表中 root 用戶的 Host 字段通常為 localhost 或 127.0.0.1,導致外部 IP 連線報錯:

ERROR 1130 (HY000): Host '192.168.x.x' is not allowed to connect to this MySQL server

解決思路:修改用戶的 Host 為 %(任意 IP)或具體 IP/網段。

二、方案一:改表法(直接操作 mysql.user 表)

⚠️ 風險提示:MySQL 8.0+ 已不推薦直接 DML 操作權限表,易導致權限緩存不一致甚至鎖死自己。

-- 1. 登入本地 MySQL
mysql -u root -p

-- 2. 切換到 mysql 系統庫
USE mysql;

-- 3. 將 root 的 Host 改為 %(允許任意 IP)
UPDATE user SET Host = '%' WHERE User = 'root';

-- 4. 驗證修改結果
SELECT Host, User FROM user;

-- 5. 刷新權限生效
FLUSH PRIVILEGES;

缺點:無法同時設置密碼、SSL、資源限制;MySQL 8.0+ authentication_string 加密方式變更,直接 UPDATE 易導致密碼失效。

三、方案二:授權法(標準 GRANT 語句,強烈推薦)

1. 在安裝 MySQL 的服務器上操作

-- 1. 本地登入
mysql -h localhost -u root -p

-- 2. 授權 root 從任意 IP 訪問(僅測試環境)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'StrongP@ssw0rd' WITH GRANT OPTION;

-- 3. 或授權業務用戶從任意 IP 訪問
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'StrongP@ssw0rd' WITH GRANT OPTION;

-- 4. 或限制特定 IP 訪問特定庫(生產推薦)
GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'StrongP@ssw0rd' WITH GRANT OPTION;

-- 5. 必須刷新權限
FLUSH PRIVILEGES;

-- 6. 退出
EXIT;

四、兩大方案深度對比

對比項改表法授權法
MySQL 版本兼容性5.7 及以下較安全;8.0+ 高風險全版本完美支持
密碼同步修改需額外 UPDATE authentication_string語句中 IDENTIFIED BY 一體化
權限粒度控制僅能改 Host,無法細化到庫/表/欄位支持 *.*, db.*, db.tbl, tbl(col) 任意粒度
資源限制不支持支持 MAX_QUERIES_PER_HOUR 等
SSL/認證插件極難配置原生支持 REQUIRE SSL、auth_plugin
操作原子性無事務保護,半途失敗導致不一致DDL 級原子操作

五、生產環境安全加固必做項

  1. 禁用 root 遠程:REVOKE ALL ON *.* FROM 'root'@'%'; 僅保留 root@'localhost'。
  2. 業務賬號最小權限:僅授予 SELECT, INSERT, UPDATE, DELETE,禁止 DROP, ALTER, GRANT OPTION。
  3. IP 白名單精確到 /24 或 /32:避免使用 %,結合雲廠商安全組/防火牆雙層防護。
  4. 強密碼 + 定期輪換:啟用 validate_password 插件,配合 PASSWORD EXPIRE。
  5. 啟用 SSL 傳輸加密:GRANT ... REQUIRE SSL,防止內網明文傳輸被竊聽。
  6. 審計日誌:部署 audit_log 或 MariaDB Audit Plugin 記錄所有登入與敏感操作。

六、驗證遠程連線

# 客戶機測試
mysql -h  -u myuser -p -P 3306

# 或使用 telnet 測試端口通達性
telnet  3306

七、總結

開啟 MySQL 遠程訪問,**強烈建議使用標準 GRANT 授權法**,摒棄直接操作 mysql.user 表的「改表法」。授權時遵循「最小權限、精確 IP、強密碼、SSL 加密、審計日誌」五大原則,並在網絡層(安全組/防火牆)同步放行對應 IP 段的 3306 端口,方能構建安全可用的遠程訪問通道。

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