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

兩步開啟 MySQL 遠程登入:防火牆放行 3306 + GRANT 授權指定 IP

     編輯:MySQL 資料庫相關知識

核心兩步驟

  1. 系統層:防火牆放行 3306 端口
  2. 資料庫層:建立遠程帳號並授權

步驟一:防火牆放行 3306

Linux (firewalld)

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

Linux (iptables)

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save

Windows 防火牆

netsh advfirewall firewall add rule name="MySQL 3306" dir=in action=allow protocol=TCP localport=3306

雲廠商安全組

控制台 → 安全組 → 入站規則 → TCP 3306 → 來源:應用伺服器 IP/ CIDR(禁用 0.0.0.0/0)

步驟二:建立遠程帳號並授權

1. 以 root 登入

mysql -u root -p

2. 授權語句模板

-- 單一 IP
GRANT ALL PRIVILEGES ON db_name.* TO 'user'@'192.168.1.100' IDENTIFIED BY 'strong_pass';

-- IP 段 (CIDR 不支援,用通配符)
GRANT ALL PRIVILEGES ON db_name.* TO 'user'@'192.168.1.%' IDENTIFIED BY 'strong_pass';

-- 任意 IP(極不推薦,僅測試)
GRANT ALL PRIVILEGES ON db_name.* TO 'user'@'%' IDENTIFIED BY 'strong_pass';

3. 參數解析

子句說明
ALL PRIVILEGES全權限;生產建議精細:SELECT,INSERT,UPDATE,DELETE,EXECUTE
db_name.*指定庫所有表;*.* 全庫、db.tbl 單表
'user'@'host'帳號@來源 IP;host 支援 % 通配
IDENTIFIED BY密碼;MySQL 8.0+ 改用 IDENTIFIED WITH caching_sha2_password BY 'pass'

4. 立即生效

FLUSH PRIVILEGES;

驗證連線

# 客戶端機器
mysql -h db_server_ip -u user -p'strong_pass' -P 3306

常見踩坑與排查

現象原因解決
Connection refused防火牆/安全組未放行檢查步驟一
Host 'x.x.x.x' is not allowedGRANT host 不匹配補授權或改用 %
Access denied for user密碼錯誤/認證插件不匹配重設密碼、確認 plugin
SSL connection required帳號要求 SSLALTER USER ... REQUIRE NONE; 或配置客戶端 SSL

安全加固建議

  • ✅ 僅授權應用伺服器 IP 段
  • ✅ 專用帳號、最小權限、強密碼
  • ✅ 啟用 SSL 加密傳輸(REQUIRE SSL)
  • ✅ 定期審計 SELECT * FROM mysql.user WHERE Host != 'localhost'
  • ✅ 異常登入告警(audit_log + SIEM)

結語

「防火牆 + GRANT」雙層把關,是 MySQL 遠程存取的標準姿勢。永遠不要對 0.0.0.0/0 開放 3306,哪怕只是「暫時測試」。

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