首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL-Front 遠程連線 MySQL 完整教學:建立遠程用戶、Host 通配符授權、防火牆開放 3306 端口與常見 1045 錯誤排查

     編輯:MySQL 資料庫相關知識

MySQL-Front 遠程連線核心前置條件

MySQL-Front 等 GUI 工具連線遠端 Linux MySQL,本質上是標準 TCP/IP 客戶端連線。必須滿足三個層面條件:

  1. MySQL 用戶權限:存在允許遠程 Host 的用戶帳號
  2. MySQL 服務綁定:bind-address = 0.0.0.0 或具體內網 IP
  3. 網路通達性:防火牆/安全組開放 3306 端口,無 VPN/代理阻隔

步驟一:檢查現有用戶 Host 限制

mysql -u root -p -e "SELECT host, user FROM mysql.user;"

-- 典型輸出:root 僅 localhost
+-----------+------+
| host      | user |
+-----------+------+
| localhost | root |
+-----------+------+

步驟二:建立專用遠程用戶 (標準流程)

-- 1. 建立用戶並指定允許連線的 Host (IP/網段/通配符)
CREATE USER 'duan'@'192.168.0.%' IDENTIFIED BY '123456';
-- 或任意主機 (僅開發測試)
-- CREATE USER 'duan'@'%' IDENTIFIED BY '123456';

-- 2. 授予必要權限 (最小權限原則)
GRANT SELECT, INSERT, UPDATE, DELETE ON mas.* TO 'duan'@'192.168.0.%';
-- 全庫全表權限 (謹慎)
-- GRANT ALL PRIVILEGES ON *.* TO 'duan'@'192.168.0.%';

-- 3. 刷新權限 (8.0+ 通常自動生效)
FLUSH PRIVILEGES;

-- 4. 驗證
SELECT host, user FROM mysql.user WHERE user = 'duan';

步驟三:修改現有用戶 Host 允許遠程 (替代方案)

-- 查看 root 現狀
SELECT host, user FROM mysql.user WHERE user = 'root';

-- 修改 root 允許任意主機 (極高風險,生產嚴禁!)
-- UPDATE mysql.user SET host = '%' WHERE user = 'root' AND host = 'localhost';
-- FLUSH PRIVILEGES;

-- 正確做法:保留 root 僅 localhost,建立專用遠程管理用戶
CREATE USER 'dba_remote'@'10.0.0.%' IDENTIFIED BY '強密碼!';
GRANT ALL PRIVILEGES ON *.* TO 'dba_remote'@'10.0.0.%' WITH GRANT OPTION;

步驟四:MySQL 服務綁定地址配置

# 編輯配置檔
vi /etc/my.cnf
# 或
vi /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
# 監聽所有網卡介面
bind-address = 0.0.0.0
# 或僅內網介面
# bind-address = 192.168.0.50

# 確保未啟用 skip-networking
# skip-networking = 0

# 重啟生效
systemctl restart mysqld

步驟五:防火牆開放 3306 端口

# CentOS/RHEL 7+ (firewalld)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" port protocol="tcp" port="3306" accept'
firewall-cmd --reload

# Ubuntu (UFW)
ufw allow from 192.168.0.0/24 to any port 3306
ufw reload

# iptables 直接
iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 3306 -j ACCEPT
service iptables save

# 雲廠商安全組 (AWS/Azure/GCP/阿里雲/騰訊雲)
# 入站規則:協議 TCP、端口 3306、來源 應用伺服器安全組 ID 或 IP 段

步驟六:MySQL-Front 連線配置

  1. 開啟 MySQL-Front → 新建連線
  2. 連線名稱:自訂 (如 生產-MySQL-192.168.0.50)
  3. 主機/IP:192.168.0.50 (遠端 Linux IP)
  4. 端口:3306 (預設)
  5. 用戶名:duan (步驟二建立的用戶)
  6. 密碼:123456
  7. 字元集:UTF-8 / utf8mb4
  8. 點擊「測試連線」→ 成功 → 確定

常見錯誤碼速查表

錯誤碼訊息原因解決
1045 Access denied for user 'xxx'@'xxx' 用戶/密碼/Host 不匹配 檢查 mysql.user Host 欄位、密碼正確性、用戶名拼寫
2003 Can't connect to MySQL server on 'xxx' 網路不通/防火牆/bind-address 檢查防火牆、bind-address=0.0.0.0、服務啟動狀態
2026 SSL connection error SSL 憑證/協議不匹配 客戶端設定「不使用 SSL」或配置正確憑證
2058 Authentication plugin 'caching_sha2_password' not supported 舊客戶端不支援 8.0 預設認證 用戶改 mysql_native_password:
ALTER USER 'duan'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
1130 Host 'xxx' is not allowed to connect 用戶 Host 限制不包含客戶端 IP 修改用戶 Host 為 % 或具體 IP/網段

MySQL 版本差異提醒

  • MySQL 4.0:舊版認證協議、無 CREATE USER、GRANT 隱式建用戶。現代工具可能不相容
  • MySQL 5.0/5.1:支援 CREATE USER、mysql_native_password
  • MySQL 5.5+:預設 mysql_native_password
  • MySQL 8.0+:預設 caching_sha2_password、移除 GRANT ... IDENTIFIED BY、需 CREATE USER + GRANT 分步、skip-name-resolve 預設關閉

安全最佳實踐總結

  1. 專用帳號:每個應用/工具/人員獨立帳號
  2. 最小權限:僅授予必要資料庫、表、操作
  3. 具體 Host:IP/網段優於 %,管理帳號限堡壘機 IP
  4. 強密碼/輪換:複雜度要求、定期變更、不重複使用
  5. SSL 加密:require_secure_transport=ON 強制加密
  6. 審計日誌:安裝 audit_log 記錄所有連線操作
  7. 禁用 root 遠程:DELETE FROM mysql.user WHERE user='root' AND host!='localhost';

MySQL-Front 遠程連線本質是標準 MySQL 客戶端連線。遵循「專用帳號、最小權限、具體 Host、防火牆隔離、SSL 加密」五重防護,配合版本相容性處理 (8.0 認證插件)、網路通達性驗證,即能穩定、安全地實現圖形化遠程資料庫管理。

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