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

MySQL 安全防護指南:從連線加密到權限最小化的完整實務

     編輯:MySQL 資料庫相關知識

核心原則:纏繞式防禦

資料庫安全非單一設定可達成,需從網路傳輸、認證授權、作業系統層面、審計監控四個維度疊加防護。

一、網路傳輸加密

  • 預設行為:MySQL 4.1.1+ 密碼交換已加密,但後續資料傳輸為明文。
  • 不可信網路:必須使用 SSH Tunnel 或 SSL/TLS 加密 TCP 連線。
    範例:ssh -L 3307:localhost:3306 user@db-host 將本地 3307 轉發至遠端 3306。
  • 替代方案:啟用 --enable-compression 壓縮協定,增加解讀難度(非替代加密)。

二、帳號與認證鐵律

規則執行方式風險若違反
所有帳號設強密碼SET PASSWORD FOR 'user'@'host' = PASSWORD('strongPwd');空密碼帳號任意連線冒用身分
禁用 root 遠端登入DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1'); FLUSH PRIVILEGES;暴力破解、提權
專用帳號、專用權限應用布號僅授 SELECT,INSERT,UPDATE,DELETE;管理帳號隔離SQL 注入影響擴大
定期輪換密碼配合 validate_password 元件強制複雜度與存活期長期洩露未察覺

三、作業系統與檔案系統層面

  1. 以非 root 執行 mysqld:建立專用 mysql 使用者,my.cnf 設定 [mysqld] user=mysql。
  2. 關閉符號連結:--skip-symbolic-links 防止任意檔案讀寫(特別是 root 執行時)。
  3. 資料目錄權限收斂:chown -R mysql:mysql /var/lib/mysql; chmod 750 /var/lib/mysql。
  4. 禁用不必要的編譯功能:源碼安裝時 -DWITHOUT_... 精簡攻擊面。

四、權限最小化與高危權限管控

五、網路與主機名稱防禦

  • 授權表使用 IP 而非主機名:避免 DNS 劫持或解析汙染。
  • 拒絕萬用字元主機名:%、192.168.% 易造成非預期存取。
  • 連線數限制:max_user_connections 防單一帳號佔滿連線池。

六、審計與監控

  • 啟用 log_error、log_bin、slow_query_log。
  • 部署 MariaDB Audit Plugin 或 MySQL Enterprise Audit 記錄 DML/DDL/登入登出。
  • 整合 SIEM(Splunk、ELK)即時告警異常模式(大量失敗登入、異常時間段 DDL、大量資料匯出)。

七、快速自檢清單

# 1. 確認無匿名帳號
SELECT User,Host FROM mysql.user WHERE User='';
# 2. 確認 root 僅限本機
SELECT User,Host FROM mysql.user WHERE User='root';
# 3. 確認無過度授權
SHOW GRANTS FOR 'app_user'@'%';
# 4. 確認 SSL 強制
SHOW VARIABLES LIKE 'have_ssl';
# 5. 確認 secure_file_priv
SHOW VARIABLES LIKE 'secure_file_priv';
安全是持續過程,而非一次性配置。建議每季執行滲透測試與權限複核,配合變更管理流程,將風險控制在可接受範圍。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
高危權限風險管控建議
FILE讀寫伺服器任意檔案(如 /etc/passwd)僅 DBA 擁有;secure_file_priv 限制目錄
PROCESS檢視所有連線執行中的 SQL(含敏感資料)僅監控帳號擁有
SUPER殺連線、改全域變數、控制複寫極少數 DBA;保留一額外連線槽給 root 緊急介入
SHUTDOWN關閉資料庫服務僅自動化部署帳號