首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 數據庫安全加固 14 條黃金法則:從訪問控制到審計日誌

     編輯:MySQL 綜合教學

MySQL 數據庫安全加固 14 條黃金法則:從訪問控制到審計日誌

數據庫是核心資產集中地,安全防護必須體系化。本文梳理 14 個維度的最佳實踐,涵蓋網絡隔離、賬號管理、權限最小化、審計追蹤、補丁管理、操作系統級加固。

1. 網絡層訪問控制

  • ❌ 禁用 GRANT ALL ON *.* TO 'root'@'%'(全網開放 root)
  • ✅ 僅允許特定應用服務器 IP 訪問:GRANT ALL ON *.* TO 'root'@'10.0.1.%'
  • ✅ 配置 bind-address=127.0.0.1 或防火牆僅開放應用服務器 IP 的 3306 端口
  • ✅ 內網環境亦建議啟用 skip-networking(僅本地 Socket 連接)或 VPC 安全組限制

2. 定期備份與災難恢復演練

  • 每日全量 + 定時增量(Binlog),異地存儲
  • 定期演練恢復流程(RTO/RPO 驗證),備份未測試等於無備份
  • 備份文件加密存儲,傳輸加密(SSL/TLS)

3. 禁用/限制遠程訪問

  • my.cnf:skip-networking(禁用 TCP)或 bind-address=127.0.0.1
  • 如需遠程,僅對特定賬號/主機開放:GRANT SELECT, INSERT ON app_db.* TO 'app_user'@'app_server_ip'

4. Root 賬號強化

  • 設置強密碼(≥16 位,含大小寫/數字/特殊字符)
  • 修改默認用戶名:RENAME USER 'root'@'localhost' TO 'dba_admin'@'localhost';
  • 禁止密碼登錄,改用 SSH 金鑰 + Socket 連接或 mysql_config_editor 存儲憑證

5. 移除測試庫與匿名賬號

DROP DATABASE test;
DELETE FROM mysql.user WHERE user='';
FLUSH PRIVILEGES;

6. 禁用 LOAD DATA LOCAL INFILE

  • 防止 SQL 注入讀取服務器任意文件(如 /etc/passwd)
  • my.cnf:local-infile=0(5.6+ 為 local_infile=OFF)

7. 清理廢棄/匿名賬號

SELECT user, host FROM mysql.user WHERE user='' OR authentication_string='';
DROP USER ''@'localhost', ''@'%';

8. 文件系統權限最小化

  • 數據目錄 /var/lib/mysql:擁有者 mysql:mysql,權限 750
  • 二進制文件 /usr/bin/mysql*:擁有者 root:root,權限 755,非 root 不可寫
  • 配置文件 /etc/my.cnf:640 root:mysql

9. 數據庫賬號權限最小化

  • 應用賃戶:GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'app_host';
  • 只讀賬號:GRANT SELECT ON *.* TO 'readonly'@'%';
  • 定期審計:SHOW GRANTS FOR 'user'@'host';,回收過期權限 REVOKE ...

10. 禁用 .mysql_history 歷史記錄

rm -f ~/.mysql_history
ln -s /dev/null ~/.mysql_history
# 或環境變量
export MYSQL_HISTFILE=/dev/null

11. 及時應用安全補丁

  • 訂閱 Oracle MySQL 安全公告、Percona/MariaDB 發布通知
  • 建立補丁測試→預發布→生產發布流程,關鍵 CVE 24h 內修復

12. 啟用審計日誌

  • 錯誤日誌:log_error,僅 root/mysql 可讀
  • 慢查詢日誌:slow_query_log=1、long_query_time=1
  • 通用查詢日誌(高負載慎用):general_log=1
  • 企業級建議部署 MariaDB Audit Plugin 或 MySQL Enterprise Audit,記錄完整 SQL、影響行數、執行耗時

13. Chroot 隔離(高安全要求場景)

  • 將 MySQL 進程限制在 /chroot/mysql 目錄樹
  • 配置 socket=/chroot/mysql/tmp/mysql.sock
  • 需自行解決動態庫依賴、時區文件、本地化文件掛載

14. 作業系統級加固(唇亡齒寒)

  • 關閉非必要服務/端口,配置 iptables/firewalld 白名單
  • SSH 禁用密碼登錄、修改默認端口、禁止 root 直接登錄
  • 啟用 auditd 審計關鍵系統調用
  • 定期掃描 Rootkit(rkhunter/chkrootkit)
  • 內核參數優化:net.ipv4.tcp_syncookies=1、fs.file-max 等

快速自查清單

檢查項命令/配置合規標準
Root 遠程登錄SELECT user,host FROM mysql.user WHERE user='root';無 '%' 主機
匿名用戶SELECT user,host FROM mysql.user WHERE user='';空集合
測試庫SHOW DATABASES LIKE 'test';不存在
本地文件讀取SHOW VARIABLES LIKE 'local_infile';OFF
密碼複雜度validate_password 插件長度≥16,含 4 類字符
SSL 傳輸SHOW VARIABLES LIKE 'have_ssl';YES
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved