預設 MySQL 僅允許本機連線,遠端存取需完成「防火牆放行」與「帳號授權」兩大步驟,缺一不可。
# CentOS 7 / RHEL 7 (firewalld)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# Ubuntu (ufw)
ufw allow 3306/tcp
# iptables 通用
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
若自訂埠 (如 3307),同理放行對應埠號。
# 1. 本機以 root 登入
mysql -uroot -p
# 2. 建立帳號並授權 (範例:允許 192.168.1.100 存取 db_app)
GRANT ALL PRIVILEGES ON db_app.* TO 'app_user'@'192.168.1.100' IDENTIFIED BY 'StrongP@ssw0rd';
# 3. 立即生效
FLUSH PRIVILEGES;
| 子句 | 說明 | 範例 |
|---|---|---|
ALL PRIVILEGES | 所有權限,或指定 SELECT,INSERT,UPDATE,DELETE,CREATE,DROP | 視最小權限原則調整 |
db_app.* | 指定資料庫.所有表;*.* 表全域;db_app.tbl 單表 | 按需縮小範圍 |
'app_user'@'192.168.1.100' | 用戶名@允許連線來源 IP;% 表任意 IP (不建議) | 生產環境務必限定 IP |
IDENTIFIED BY 'pwd' | 設定密碼 | 強密碼策略 |
user.Host 欄位。bind-address 仍為 127.0.0.1。--ssl-mode=DISABLED 或配置憑證。# 遠端機器測試
mysql -h 192.168.1.50 -u app_user -p db_app