預設 MySQL 僅允許 localhost 連線,遠端存取需完成 **帳號授權**、**網路綁定**、**防火牆開放** 三大步驟。本文提供兩種授權模式、配置檔調整與驗證流程,適用 MySQL 5.7/8.0。
-- 允許指定 IP 遠端連線
CREATE USER 'app_user'@'192.168.1.100' IDENTIFIED BY 'StrongP@ssw0rd';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'192.168.1.100';
FLUSH PRIVILEGES;
-- 或允許任意 IP (僅受信任網段/防火牆保護時)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongP@ssw0rd';
GRANT ALL PRIVILEGES ON mydb.* TO 'app_user'@'%';
FLUSH PRIVILEGES;
8.0 新語法:CREATE USER ... IDENTIFIED WITH mysql_native_password BY 'pwd'; 相容舊驅動。
-- 登入本機 mysql
mysql -u root -p
USE mysql;
UPDATE user SET host='%' WHERE user='root' AND host='localhost';
FLUSH PRIVILEGES;
⚠ **生產嚴禁**:root 暴露於網路極高風險,必須搭配防火牆限制來源 IP、強制 SSL、複雜密碼、定期輪換。
[mysqld]
# 5.7/8.0 預設 bind-address=127.0.0.1 僅回環
# 選項 A:註解掉監聽所有介面 (0.0.0.0)
# bind-address = 127.0.0.1
# 選項 B:指定具體內網 IP (較安全)
bind-address = 192.168.1.50
# 選項 C:8.0 支援多位址
bind-address = 192.168.1.50, 10.0.0.10
修改後 **必須重啟服務**:systemctl restart mysqld / net stop mysql && net start mysql。
| 作業系統 | 指令 |
|---|---|
| CentOS 7/8 (firewalld) | firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reload |
| Ubuntu (ufw) | ufw allow 3306/tcp |
| Windows 防火牆 | 進階設定 → 輸入規則 → 新增規則 → 連接埠 TCP 3306 → 允許連線 → 套用至域/專用/公用 |
| 雲端安全組 (AWS/Azure/GCP) | 入站規則:TCP 3306,來源 CIDR 限定應用伺服器網段 (如 10.0.1.0/24) |
# 客戶端機器測試
mysql -h 192.168.1.50 -u app_user -p -D mydb
# 或使用 GUI 工具 (Workbench, DBeaver, DataGrip) 建立連線測試
Host 'x.x.x.x' is not allowed to connect → 帳號 host 欄位不匹配,檢查 SELECT user, host FROM mysql.user;。Can't connect to MySQL server on 'host' (10060) → 網路不通:防火牆、安全組、bind-address、VPN/路由。Authentication plugin 'caching_sha2_password' cannot be loaded → 8.0 預設新認證插件,舊驅動不支援。解決:ALTER USER 'u'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd'; 或升級驅動。SSL connection required → 帳號有 REQUIRE SSL,客戶端需啟用 SSL 或移除要求。REQUIRE SSL + 客戶端驗證 CA。mysql.user 異常帳號。audit_log 插件) 記錄登入/查詢。