數據庫是核心資產集中地,安全防護必須體系化。本文梳理 14 個維度的最佳實踐,涵蓋網絡隔離、賬號管理、權限最小化、審計追蹤、補丁管理、操作系統級加固。
GRANT ALL ON *.* TO 'root'@'%'(全網開放 root)GRANT ALL ON *.* TO 'root'@'10.0.1.%'bind-address=127.0.0.1 或防火牆僅開放應用服務器 IP 的 3306 端口skip-networking(僅本地 Socket 連接)或 VPC 安全組限制my.cnf:skip-networking(禁用 TCP)或 bind-address=127.0.0.1GRANT SELECT, INSERT ON app_db.* TO 'app_user'@'app_server_ip'RENAME USER 'root'@'localhost' TO 'dba_admin'@'localhost';mysql_config_editor 存儲憑證DROP DATABASE test; DELETE FROM mysql.user WHERE user=''; FLUSH PRIVILEGES;
/etc/passwd)my.cnf:local-infile=0(5.6+ 為 local_infile=OFF)SELECT user, host FROM mysql.user WHERE user='' OR authentication_string=''; DROP USER ''@'localhost', ''@'%';
/var/lib/mysql:擁有者 mysql:mysql,權限 750/usr/bin/mysql*:擁有者 root:root,權限 755,非 root 不可寫/etc/my.cnf:640 root:mysqlGRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'app_host';GRANT SELECT ON *.* TO 'readonly'@'%';SHOW GRANTS FOR 'user'@'host';,回收過期權限 REVOKE ...rm -f ~/.mysql_history ln -s /dev/null ~/.mysql_history # 或環境變量 export MYSQL_HISTFILE=/dev/null
log_error,僅 root/mysql 可讀slow_query_log=1、long_query_time=1general_log=1MariaDB Audit Plugin 或 MySQL Enterprise Audit,記錄完整 SQL、影響行數、執行耗時/chroot/mysql 目錄樹socket=/chroot/mysql/tmp/mysql.sockiptables/firewalld 白名單auditd 審計關鍵系統調用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 |