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

MySQL 開放任意 IP 遠程訪問:修改 user 表 host 欄位實操指南

     編輯:MySQL 綜合教學

MySQL 開放任意 IP 遠程訪問:修改 user 表 host 欄位實操指南

MySQL 預設僅允許 localhost (127.0.0.1) 本地連接。若需開放任意 IP 遠程訪問,最直接的方法是修改 mysql.user 系統表中 root 用戶的 Host 欄位從 localhost 改為 %(通配符,匹配任意主機)。本文記錄命令列完整操作流程、驗證步驟與安全性警示。

⚠ 安全警告: 生產環境嚴禁 將 root 開放為 %。請建立專用業務用戶、限制具體 IP 段、啟用 SSL、配置防火牆白名單。本文僅供開發測試環境或教學參考。

一、操作前置條件

  • 已安裝 MySQL 且服務正常運行
  • 知道 root 密碼(或免密登入)
  • 具備系統終端訪問權限
  • MySQL 安裝路徑已加入 PATH,或知曉 bin 目錄絕對路徑

二、命令列完整操作流程

1. 進入 MySQL 安裝目錄 bin 文件夾

# Windows 示例
cd \
cd "C:\Program Files\MySQL\MySQL Server 5.7\bin"
# 或
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"

# Linux 示例(通常已在 PATH)
# 可直接執行 mysql 命令

2. 連接 MySQL 服務

mysql -h localhost -u root -p
# 提示輸入密碼,輸入 root 密碼
# 成功進入 mysql> 提示符

3. 查看當前用戶 Host 設置

mysql> USE mysql;
Database changed

mysql> SELECT User, Host FROM user;
+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| debian-sys-maint | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

4. 修改 root 用戶 Host 為 %

mysql> UPDATE user SET Host='%' WHERE User='root' AND Host='localhost';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

5. 刷新權限生效

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

6. 驗證修改結果

mysql> SELECT User, Host FROM user;
+------------------+------+
| User             | Host |
+------------------+------+
| root             | %    |   <-- 已變更
| mysql.session    | localhost |
| mysql.sys        | localhost |
| debian-sys-maint | localhost |
+------------------+------+
4 rows in set (0.00 sec)

三、遠程連接驗證

# 另一台機器/客戶端測試
mysql -h  -u root -p
# 應可成功連接

四、更安全的替代方案(生產環境必讀)

方案 A:建立專用遠程用戶(推薦)

-- 僅允許特定 IP 段
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'192.168.1.%';

-- 或允許任意 IP(較寬鬆)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'%';

FLUSH PRIVILEGES;

方案 B:保留 root 僅本地,配合 SSH 隧道

# 客戶端建立 SSH 隧道
ssh -L 3307:127.0.0.1:3306 user@mysql_server_ip

# 本地連接隧道端口
mysql -h 127.0.0.1 -P 3307 -u root -p
# 流量經 SSH 加密傳輸,MySQL 僅見本地連接

方案 C:MySQL 8.0 專用賬號管理

-- 創建用戶指定認證插件(相容舊客戶端)
CREATE USER 'remote_user'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON business_db.* TO 'remote_user'@'%';
FLUSH PRIVILEGES;

五、配合網路層防護(必做)

  1. 修改 bind-address: /etc/my.cnf 設置 bind-address = 0.0.0.0 或具體內網 IP
  2. 防火牆白名單:
    # Ubuntu UFW
    sudo ufw allow from 192.168.1.0/24 to any port 3306
    
    # CentOS firewalld
    firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'
    firewall-cmd --reload
    
    # 雲廠商安全組:入站規則 3306/tcp 來源 192.168.1.0/24
    
  3. 啟用 SSL: require_secure_transport=ON 強制加密連接

六、常見問題排查

問題原因解決
ERROR 1130: Host 'x.x.x.x' not allowed用戶 Host 欄位不匹配檢查 user 表 Host 值,確認 % 或具體 IP
ERROR 2003: Can't connect (10060)網路不通/防火牆阻擋ping、telnet 3306、檢查安全組/防火牆
ERROR 2059: Authentication pluginMySQL 8.0 caching_sha2_password用 mysql_native_password 或升級客戶端
修改後仍無法遠程連接bind-address 仍為 127.0.0.1修改 my.cnf bind-address=0.0.0.0 並重啟

七、權限表結構補充說明

mysql> DESC user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host                   | char(60)                          | NO   | PRI |         |       |
| User                   | char(32)                          | NO   | PRI |         |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N       |       |
| ...                    | ...                               |      |     |         |       |
| authentication_string  | text                              | YES  |     | NULL    |       |
| plugin                 | char(64)                          | NO   |     |         |       |
+------------------------+-----------------------------------+------+-----+---------+-------+
-- 主鍵為 (Host, User),同一用戶不同 Host 視為不同賬號

修改 mysql.user 表的 Host 欄位是開放遠程訪問的「核按鈕」,操作簡單但風險極高。生產環境請務必遵循最小權限原則:專用用戶、具體 IP、強密碼、SSL 加密、網路隔離。開發測試環境使用本文方法可快速驗證連通性,用畢即刪或恢復。

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