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

守護 MySQL 核心資產的六大關鍵防線:從授權表到稽核日誌的完整實務

     編輯:MySQL 資料庫相關知識

第一防線:清除授權表萬用字元

  • 檢查 mysql.user、db、tables_priv、columns_priv 中的 Host、Db、Table_name、Column_name 是否含 %、_。
  • SHOW GRANTS FOR 'user'@'%'; 逐帳號審查。
  • 原則:最小權限、明確指定主機/IP、拒絕萬用字元。
  • 超級權限(SUPER、FILE、PROCESS、SHUTDOWN、RELOAD)僅限管理帳號。

第二防線:強制強密碼策略

  • Root 密碼安裝即設定(預設為空)。
  • 所有帳號強制密碼:長度 ≥12、大小寫數字符號混合、非字典詞、非個資。
  • 啟用 validate_password 元件(MySQL 5.6+)強制複雜度:
INSTALL COMPONENT 'file://component_validate_password';
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;
SET GLOBAL validate_password.policy = STRONG;
  • 避免舊式雜湊:啟動參數 --secure-auth(預設開啟)拒絕 pre-4.1 密碼格式。

第三防線:保護設定檔與憑證檔案

  • 客戶端設定檔(~/.my.cnf、/etc/mysql/conf.d/*.cnf)權限 chmod 600,擁有者為對應使用者。
  • 勿將密碼寫入版控(Git/SVN),使用環境變數或密碼管理工具(Vault、AWS Secrets Manager)。
  • 應用程式設定檔同樣嚴格權限控制。

第四防線:加密傳輸通道

  • 啟用 SSL/TLS:my.cnf 設定 ssl-ca、ssl-cert、ssl-key,require_secure_transport=ON。
  • 或使用 SSH 隧道:ssh -L 3307:localhost:3306 user@db_host,應用連線 127.0.0.1:3307。
  • 驗證:SHOW STATUS LIKE 'Ssl_cipher'; 應顯示加密套件而非空值。

第五防線:封鎖非必要遠端存取

  • 無遠端需求:bind-address = 127.0.0.1 或 --skip-networking(僅 Unix Socket)。
  • 有遠端需求:防火牆僅開放應用伺服器 IP 存取 3306。
  • 驗證:nmap -p 3306 db_host 應顯示 filtered 或 closed。

第六防線:持續稽核與監控

  • 啟用一般查詢日誌:general_log=1、general_log_file=/var/log/mysql/query.log。
  • 啟用稽核日誌元件(Enterprise)或開源 MariaDB Audit Plugin / McAfee MySQL Audit,記錄:連線/斷線、DDL/DML、失敗登入、權限變更。
  • 日誌分析:定期腳本檢測異常模式(短時大量失敗登入、非常態時間 DDL、敏感表大量 SELECT、權限提升嘗試)。
  • 整合 SIEM(Splunk、ELK、Wazuh)集中告警。

總結:資安是持續程序

六大防線層層疊加:授權最小化 → 強密碼 → 設定檔保護 → 傳輸加密 → 網路隔離 → 持續稽核。缺一不可。建立季度審核機制,納入變更管理流程,確保新帳號、新應用、架構變更皆通過安全檢核才上線。

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