MySQL 預設僅允許本地連線,開啟遠程存取需完成兩個必要動作:作業系統防火牆開放 3306 埠、資料庫建立允許遠程 IP 的授權帳號。本文提供 Windows/Linux 雙平台指令與參數詳細解析。
# firewalld (CentOS 7+)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# iptables (舊版)
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
# 管理員 PowerShell
New-NetFirewallRule -DisplayName "MySQL 3306" -Direction Inbound -LocalPort 3306 -Protocol TCP -Action Allow
AWS Security Group / Azure NSG / 阿里云安全組 → 入站規則 → TCP 3306 → 來源:特定 IP 或 0.0.0.0/0(僅測試環境)。
mysql -u root -p
# 輸入 root 密碼
GRANT ALL PRIVILEGES ON discuz.* TO 'ted'@'123.123.123.123' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
| 參數 | 含義 | 範例/說明 |
|---|---|---|
ALL PRIVILEGES | 所有權限 | 可細化:SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 等,逗號分隔 |
discuz.* | 作用對象:資料庫.表 | *.* 全庫全表;db.* 單庫全表;db.tbl 單表 |
'ted' | 使用者名稱 | 可存在或不存在(自動建立) |
'123.123.123.123' | 允許連線的 Client IP | % 表示任意 IP(開發環境);生產建議限定具體 IP/網段 |
'123456' | 密碼 | 強密碼策略 |
-- 允許任意 IP(僅測試/開發)
GRANT SELECT,INSERT ON mydb.* TO 'dev'@'%' IDENTIFIED BY 'DevPass#2024';
-- 僅允許特定網段
GRANT ALL ON prod.* TO 'app'@'192.168.10.%' IDENTIFIED BY 'AppPass#2024';
-- MySQL 8.0+ 語法分離
CREATE USER 'app'@'192.168.10.%' IDENTIFIED BY 'AppPass#2024';
GRANT ALL ON prod.* TO 'app'@'192.168.10.%';
# 從遠程客戶端機器
mysql -h server_ip -u ted -p123456 -e "SELECT USER(), CURRENT_USER();"
# 成功顯示 ted@123.123.123.123
telnet server_ip 3306)bind-address 是否為 0.0.0.0 或具體內網 IP?(/etc/my.cnf)Host 欄位是否匹配客戶端 IP?(SELECT User, Host FROM mysql.user;)caching_sha2_password,舊客戶端需指定 mysql_native_password。「防火牆 + 授權帳號」雙重把關是資料庫網路安全基線。**生產環境嚴禁 root@'%'**,遵循最小權限、限定 IP、強密碼、定期輪換、審計登入日誌。