萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 電腦入門

MySQL 資料庫防禦攻擊實戰指南

核心防禦原則

資料庫安全的核心在於「最小權限原則」與「纵深防禦」。以下措施涵蓋網路傳輸、帳號管理、伺服器配置、權限控制四大面向,助您建立強健的 MySQL 防線。

一、加密網路傳輸

  • 強制使用 SSL/TLS:啟用 MySQL SSL 連線,防止帳號密碼與敏感資料在網路上以明文傳輸。配置 require_secure_transport=ON 強制所有連線加密。
  • SSH 隧道:若資料庫不對外公開,僅允許本地連線,管理者透過 SSH 隧道(ssh -L 3306:localhost:3306 user@server)連線,等同於在不可信網路上建立加密通道。
  • 避免舊版認證協定:MySQL 4.1.1 以前的雜湊演算法脆弱,務必升級至 5.6+ 並使用 mysql_native_password 或 caching_sha2_password 認證插件。

二、帳號與認證強化

  • 根帳號禁用遠端登入:UPDATE mysql.user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES; 僅允許本地連線。
  • 強制所有帳號設定強密碼:密碼長度 ≥ 16 字元,包含大小寫、數字、符號。定期輪換。
  • 移除匿名帳號:DELETE FROM mysql.user WHERE User=''; FLUSH PRIVILEGES;
  • 刪除測試資料庫:DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'; FLUSH PRIVILEGES;

三、伺服器配置硬化

  • 以非 root 系統使用者執行 mysqld:建立專用 mysql 系統帳號,在 my.cnf [mysqld] 區段設定 user=mysql。嚴禁以 root 身分啟動資料庫進程。
  • 禁用符號連結:[mysqld] skip-symbolic-links=1 防止任意檔案讀寫風險。
  • 限制檔案權限:資料目錄(datadir)僅授予 mysql 使用者讀寫權限(chmod 750,chown mysql:mysql)。
  • 關閉不必要的功能:local_infile=0(防止 LOAD DATA LOCAL 任意讀取客戶端檔案)、skip-show-database(隱藏資料庫列表)。
  • 啟用審計日誌:安裝 audit_log 插件,記錄所有查詢、連線、錯誤嘗試,便於事後追蹤。

四、精細權限控制

  • 應用程式帳號僅授予必要權限:GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'10.0.0.%'; 避免 GRANT ALL 或 WITH GRANT OPTION。
  • 嚴格限制管理權限:PROCESS、SUPER、FILE、SHUTDOWN、RELOAD 僅授予 DBA 專用帳號。SUPER 權限可終止任意連線、修改全域變數、控制複寫,極度敏感。
  • 保留緊急連線:MySQL 預留一個 SUPER 連線槽,確保管理員在連線耗盡時仍能登入排查。

五、進階防護建議

  • Web 應用防火牆 (WAF):部署 ModSecurity + OWASP CRS 或商用 WAF,攔截 SQL Injection、XSS 等應用層攻擊。
  • 資料庫防火牆:如 MariaDB MaxScale、ProxySQL,基於語法分析阻擋異常查詢。
  • 定期修補與掃描:訂閱 Oracle/MySQL 安全公告,及時套用補丁;使用 mysql_secure_installation、Lynis、OpenVAS 定期掃描弱點。
  • 備份加密與異地備援:備份檔案必須加密儲存,並驗證還原可行性。

快速自檢清單

檢查項目合規標準
root 遠端登入已禁用
匿名帳號已移除
測試資料庫已刪除
SSL/TLS 強制啟用
mysqld 執行身分非 root 專用帳號
符號連結已禁用
應用程式帳號權限最小必要權限
審計日誌已啟用
備份加密/異地已落實

資料庫安全非一次性設定,而是持續的流程。建議將上述措施納入基礎設施即代碼 (IaC) 與 CI/CD 流程,確保每次部署皆符合安全基準線。

copyright © 萬盛學電腦網 all rights reserved