環境
- Ubuntu + MySQL 5.x/8.x
- 目標:允許 192.168.1.0/24 網段遠端連線
步驟 1:修改 bind-address
# /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf
[mysqld]
bind-address = 192.168.1.107 # 本機實際 IP,或 0.0.0.0 監聽所有介面
# bind-address = 127.0.0.1 # 預設僅本地,需修改
systemctl restart mysql
步驟 2:建立遠端授權帳號
mysql -u root -p
CREATE USER 'app'@'192.168.1.%' IDENTIFIED BY 'StrongP@ssw0rd!';
GRANT ALL PRIVILEGES ON mydb.* TO 'app'@'192.168.1.%';
FLUSH PRIVILEGES;
% 通配所有 IP(不建議生產)
192.168.1.% 限定網段
192.168.1.50 限定單一 IP
步驟 3:防火牆放行 3306
# UFW (Ubuntu)
ufw allow from 192.168.1.0/24 to any port 3306
ufw enable
# iptables
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
iptables-save > /etc/iptables/rules.v4
# cloud 安全組:入站規則 TCP 3306 來源 192.168.1.0/24
驗證連線
# 客戶端測試
mysql -h 192.168.1.107 -u app -p
telnet 192.168.1.107 3306
常見問題排查
| 現象 | 可能原因 | 解決 |
| Connection refused | bind-address 錯誤/服務未重啟 | 檢查 my.cnf、systemctl restart mysql |
| Access denied | 帳號主機不匹配/密碼錯誤 | 檢查 user.Host、重設密碼 |
| Timeout | 防火牆/安全組阻擋 | 開放 3306 入站 |
| SSL error | MySQL 8.0 預設要求 SSL | 加 useSSL=false 或配置憑證 |
安全加固建議
- 帳號密碼複雜度、定期輪換
- 啟用 SSL/TLS 加密傳輸
- 僅開放應用伺服器 IP,禁止 0.0.0.0/0
- 監控異常登入:
audit_log、Aborted_connects