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

MySQL 通信安全硬化:從明文傳輸到 SSL/TLS 加密與 SSH 隧道

     編輯:MySQL 資料庫相關知識

默認風險:明文傳輸

MySQL 協議默認**除密碼外所有數據明文傳輸** (SQL 語句、結果集、錯誤信息)。中間人可通過 ARP 欺騙、交換器鏡像、路由器抓包完整重構業務數據。

分層加固方案

第 0 層:認證與授權基線 (必要前提)

  • 所有賬號**強制複雜密碼**,禁止空密碼
  • mysql_secure_installation 移除匿名用戶、禁用遠程 Root、刪除 test 庫
  • 最小權限:應用賬號僅 SELECT/INSERT/UPDATE/DELETE,無 FILE/PROCESS/SUPER
  • 主機名白名單:CREATE USER 'app'@'10.0.1.%',拒絕 %

第 1 層:壓縮協議 (MySQL 3.22+)

# 客戶端啟用
mysql --compress -h db_host -u user -p
# 或連接字串
jdbc:mysql://db_host:3306/db?useCompression=true

作用:減少帶寬、輕度混淆明文,**不提供加密/完整性保護**,僅作性能優化。

第 2 層:SSL/TLS 加密 (MySQL 4.0+ / 5.7+ 強制優化)

服務端配置

[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 匹配主機名

強制用戶僅走 SSL

CREATE USER 'app'@'10.0.1.%' IDENTIFIED BY 'pass' REQUIRE SSL;
-- 或 REQUIRE X509 / REQUIRE ISSUER '...' / REQUIRE SUBJECT '...'

第 3 層:SSH 隧道 (零信任網絡、跨雲/跨 IDC)

# 本地 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
  • 繞過防火牆限制,僅需 SSH 端口 (22/自定義)
  • 複用 SSH 金鑰認證、多因子認證、審計日誌
  • 適合運維、開發調試、跨 VPC 訪問

第 4 層:網絡隔離與零信任 (架構級)

  • 私有網絡/VPC:資料庫無公網 IP,僅在私有子網
  • 安全組/NACL:入站僅允許應用服務器安全組 3306
  • 私有連接/PrivateLink:跨 VPC/帳號訪問不經公網
  • 零信任代理:如 Cloudflare Access、Tailscale、Teleport,身份感知代理替代 VPN

驗證加密生效

# 服務端
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

常見誤區

  • 只開 SSL 不配置 REQUIRE SSL:攻擊者仍可降級明文連接
  • 自簽證書不驗證 CA:中間人可攔截重簽
  • 憑證過期未輪換:導致連接失效或繞過驗證
  • 忽略 Binlog/Redo Log 傳輸:Replication 同樣需 CHANGE MASTER TO MASTER_SSL=1

結語

「密碼不明文」只是起點。**SSL/TLS + 強制驗證 + 網絡隔離 + 身份感知代理** 才是現代 MySQL 通信安全的標準配置。對於合規要求高 (等保三級、PCI-DSS、GDPR) 的系統,**全鏈路加密 (Client→Proxy→Server、Replication、Backup)** 為不可妥協的底線。

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