MySQL 協議默認**除密碼外所有數據明文傳輸** (SQL 語句、結果集、錯誤信息)。中間人可通過 ARP 欺騙、交換器鏡像、路由器抓包完整重構業務數據。
mysql_secure_installation 移除匿名用戶、禁用遠程 Root、刪除 test 庫SELECT/INSERT/UPDATE/DELETE,無 FILE/PROCESS/SUPERCREATE USER 'app'@'10.0.1.%',拒絕 %# 客戶端啟用
mysql --compress -h db_host -u user -p
# 或連接字串
jdbc:mysql://db_host:3306/db?useCompression=true
作用:減少帶寬、輕度混淆明文,**不提供加密/完整性保護**,僅作性能優化。
[mysqld]
# 自動生成自簽證書 (5.7+)
# 或手動指定
ssl_ca=/etc/mysql/ssl/ca.pem
ssl_cert=/etc/mysql/ssl/server-cert.pem
ssl_key=/etc/mysql/ssl/server-key.pem
require_secure_transport=ON # 強制加密,拒絕明文連接
| 模式 | 參數 | 安全性 |
|---|---|---|
| 不驗證 | --ssl-mode=PREFERRED (默認) | 僅加密,不防中間人 |
| 驗證 CA | --ssl-mode=VERIFY_CA --ssl-ca=ca.pem | 防中間人,需部署 CA |
| 驗證身份 | --ssl-mode=VERIFY_IDENTITY | 最高,驗證 CN/SAN 匹配主機名 |
CREATE USER 'app'@'10.0.1.%' IDENTIFIED BY 'pass' REQUIRE SSL;
-- 或 REQUIRE X509 / REQUIRE ISSUER '...' / REQUIRE SUBJECT '...'
# 本地 3307 轉發到遠程 db_host:3306
ssh -L 3307:127.0.0.1:3306 user@db_host -N -f
# 應用連接 127.0.0.1:3307
mysql -h 127.0.0.1 -P 3307 -u app -p
# 服務端
SHOW STATUS LIKE 'Ssl_cipher'; -- 顯示加密套件即成功
SHOW VARIABLES LIKE 'have_ssl'; -- YES
# 客戶端
mysql --ssl-mode=VERIFY_CA --ssl-ca=ca.pem -h db_host -u app -p
\s -- 顯示 SSL: Cipher in use is TLS_AES_256_GCM_SHA384
CHANGE MASTER TO MASTER_SSL=1「密碼不明文」只是起點。**SSL/TLS + 強制驗證 + 網絡隔離 + 身份感知代理** 才是現代 MySQL 通信安全的標準配置。對於合規要求高 (等保三級、PCI-DSS、GDPR) 的系統,**全鏈路加密 (Client→Proxy→Server、Replication、Backup)** 為不可妥協的底線。