前言
數據庫安全是系統防禦的最後一道防線。本文梳理六大實戰策略,從審計、權限、傳輸、配置、網絡到認證,構建纵深防護體系。
策略一:積極審計訪問日誌
關鍵日誌類型
- General Query Log:記錄所有連接/斷開/查詢,審計首選
- Error Log:服務啟停、崩潰、異常信息
- Slow Query Log:性能分析副產物,亦可發現異常掃描
- Binary Log:主從同步基礎,亦可用於變更追蹤
實施建議
[mysqld]
general_log = ON
general_log_file = /var/log/mysql/mysql_audit.log
log_output = FILE -- 或 TABLE 寫入 mysql.general_log 表
- 定期歸檔壓縮,保留 90 天以上
- 接入 SIEM 系統(如 ELK、Splunk)實時告警
- 重點監控:非常用時間登錄、大量失敗嘗試、DDL 操作、權限變更
策略二:清理授權表通配符
風險場景
-- 危險:% 允許任意主機
GRANT ALL ON *.* TO 'dev'@'%' IDENTIFIED BY 'weak';
-- 危險:庫級通配符
GRANT ALL ON `db_%`.* TO 'app'@'10.0.%';
整治步驟
SELECT user, host FROM mysql.user WHERE host LIKE '%%'; 掃描通配符賬號
SHOW GRANTS FOR 'user'@'host'; 審核具體權限
- 最小權限原則:按「業務賬號 + 具體 IP + 單庫單表 + 僅需 CRUD」重新授權
- 移除無用賬號:
DROP USER 'test'@'%';
策略三:加密客戶端-服務端傳輸
方案對比
| 方案 | 優點 | 缺點 | 適用場景 |
| MySQL 原生 SSL | 零依賴、原生支持 | 證書管理較繁瑣 | 內網/雲托管 |
| SSH 隧道 | 複用 SSH 金鑰、穿透防火牆 | 需維護隧道進程 | 運維訪問、跨網段 |
| VPN / VPC | 網絡層隔離、全流量加密 | 架構調整大 | 生產環境標配 |
MySQL SSL 快速啟用
-- 服務端生成證書(或用 mysql_ssl_rsa_setup)
-- my.cnf
[mysqld]
ssl_ca=/etc/mysql/certs/ca.pem
ssl_cert=/etc/mysql/certs/server-cert.pem
ssl_key=/etc/mysql/certs/server-key.pem
require_secure_transport=ON -- 強制加密連接
-- 客戶端驗證
mysql --ssl-mode=VERIFY_IDENTITY --ssl-ca=ca.pem ...
策略四:鎖緊配置文件權限
# 客戶端配置 ~/.my.cnf
[client]
user=app_user
password=Str0ngP@ssw0rd!
# 權限必須 600
chmod 600 ~/.my.cnf
chown app_user:app_user ~/.my.cnf
- 禁止在代碼庫提交明文密碼
- 生產環境使用密碼管理工具(Vault、AWS Secrets Manager)
- 服務端
my.cnf 同樣限制 chmod 640、屬主 mysql:mysql
策略五:禁用/限制遠程訪問
層級防護
- 服務端綁定:
bind-address = 127.0.0.1(僅本機)或內網 IP
- 防火牆:
iptables -A INPUT -p tcp --dport 3306 -s 10.0.0.0/8 -j ACCEPT
- 賬號綁定:
CREATE USER 'app'@'10.0.1.%' ... 拒絕 %
- 跳板機/堡壘機:運維統一入口,審計錄屏
策略六:強制強密碼策略
-- 安裝插件(MySQL 5.6+)
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
-- 配置策略
[mysqld]
validate_password_policy=MEDIUM -- LOW/MEDIUM/STRONG
validate_password_length=12
validate_password_mixed_case_count=1
validate_password_number_count=1
validate_password_special_char_count=1
-- 禁止舊式密碼
default_authentication_plugin=mysql_native_password
old_passwords=0
持續安全清單
- [ ] 季度輪換服務賬號密鑰
- [ ] 月度審計
mysql.user 與 mysql.db
- [ ] 啟用
log_raw=OFF 防止日誌注入
- [ ] 定期運行
mysql_secure_installation
- [ ] 訂閱 MySQL 安全公告(CVE)並及時打補丁
安全不是產品,而是過程。將上述策略納入 CI/CD 與運維 SOP,才能真正落地。
copyright ©
萬盛學電腦網 all rights reserved