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

MySQL 資料庫安全強化 23 項關鍵檢查清單

     編輯:MySQL 資料庫相關知識

MySQL 資料庫安全強化 23 項關鍵檢查清單


資料庫安全是系統防護的最後一道防線。以下整理 23 項 MySQL 安全配置與操作建議,涵蓋網路傳輸、帳號權限、密碼策略、防火牆、審計追蹤等面向,助你建立纏深防禦體系。


網路傳輸與連線安全

  1. 跨非信任網路連線必須加密:使用 SSH Tunnel 或 SSL/TLS 加密 Client-Server 通訊,防止竊聽與竄改。
  2. 禁用明文密碼傳輸:啟用 SSL 連線(REQUIRE SSL),或透過 VPN/SSH 隔離資料庫網段。
  3. 限制 3306 埠存取:防火牆僅允許應用伺服器 IP 存取 3306,禁止公網直連。可用 nmap 或 telnet 驗證埠口暴露狀況。

帳號與權限管理

  1. 嚴守最小權限原則:應用程式使用專用帳號,僅授予必要資料表的 SELECT/INSERT/UPDATE/DELETE 權限,禁止 GRANT ALL。
  2. 根帳號隔離:root 僅供管理維護使用,禁止應用程式使用。生產環境建議重命名 root 帳號(RENAME USER root TO admin_xxx)。
  3. 移除匿名帳號與測試資料庫:執行 mysql_secure_installation 刪除匿名用戶、test 資料庫、遠端 root 登入。
  4. 禁止非管理員存取 mysql 系統庫:user 表儲存密碼雜湊,洩露即意味著帳號被盜用。
  5. 使用 GRANT/REVOKE 精細控制:按資料庫、資料表、欄位層級授權,定期審核權限清單。
  6. 嚴控高危權限:FILE、PROCESS、SUPER、SHUTDOWN 僅授予 DBA 帳號,防止 LOAD DATA INFILE 讀取系統檔案或 mysqladmin processlist 洩露查詢文本。

密碼與認證策略

  1. 強制複雜密碼策略:安裝 validate_password 插件,設定長度、大小寫、數字、特殊字元要求,拒絕字典字詞。
  2. 密碼儲存使用單向雜湊:MySQL 內部使用 SHA256(8.0+)或 mysql_native_password,應用層切勿自行使用 MD5/SHA1。
  3. 定期輪換密碼:設定 default_password_lifetime 強制週期性更換,配合密碼歷史記錄防止重複使用。
  4. 避免在指令稿/程式碼硬編碼密碼:使用設定檔、環境變數或密碼管理工具(Vault、AWS Secrets Manager)。

防禦 SQL 注入與輸入驗證

  1. 參數化查詢/預處理語句:所有動態 SQL 必須使用 PreparedStatement,嚴禁字串拼接。
  2. 輸入長度與型別驗證:應用層限制欄位長度、數值範圍、格式(如正則驗證 Email、手機號)。
  3. 轉義特殊字元:若無法使用參數化,必須呼叫驅動程式提供的逃脫函數(mysql_real_escape_string、PDO::quote 等)。

稽核與監控

  1. 啟用審計日誌:安裝 MariaDB Audit Plugin 或 MySQL Enterprise Audit,記錄登入、DDL、DML、失敗嘗試。
  2. 監控異常連線與慢查詢:設定 long_query_time、log_queries_not_using_indexes,配合 Pt-query-digest 分析。
  3. 限制單一帳號最大連線數:使用 max_user_connections 防止單一帳號佔滿連線池造成拒絕服務。
  4. 資源控制選項:GRANT 支援 MAX_QUERIES_PER_HOUR、MAX_UPDATES_PER_HOUR 等配額限制。

緊急應變與備份

  1. 根密碼遺失重置流程:--skip-grant-tables 啟動 → 更新 user 表 password 欄位 → FLUSH PRIVILEGES → 重啟正常模式。演練此流程確保關鍵時刻可恢復存取。

實施建議

  • 將上述清單納入資料庫上線驗收標準,每季執行一次安全基線掃描。
  • 配合資料庫防火牆(如 MariaDB MaxScale、ProxySQL)實現查詢攔截與動態遮罩。
  • 建立資料分級分類制度,核心敏感資料啟用透明加密(TDE)與欄位級加密。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved