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

MySQL 核心數據安全防護七大實戰策略

     編輯:MySQL 資料庫相關知識

策略一:清理授權表通配符,落實最小權限

-- 檢查通配符授權
SELECT User, Host, Db FROM mysql.db WHERE Host LIKE '%' OR Db LIKE '%';
SELECT User, Host FROM mysql.user WHERE Host = '%';

-- 修正:收回過度授權
REVOKE ALL ON *.* FROM 'dev_user'@'%';
GRANT SELECT, INSERT ON `biz_db`.* TO 'dev_user'@'10.0.1.%';

-- 審核超級權限
SELECT User, Host FROM mysql.user WHERE Super_priv = 'Y';

原則:按業務角色拆分賬號,僅授予必需庫/表/列權限,嚴禁 % 通配符。

策略二:強制強密碼策略,淘汰弱口令

-- 安裝密碼驗證插件(5.7+ 內置)
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

-- 配置強策略
SET GLOBAL validate_password.policy = 'STRONG';
SET GLOBAL validate_password.length = 16;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;

-- 禁用舊格式密碼(5.7+)
SET GLOBAL old_passwords = 0;

策略三:保護配置文件與客戶端憑證

  • my.cnf 權限 640 root:mysql,禁止 other 讀取
  • 客戶端 ~/.my.cnf 權限 600,存放 [client] password=xxx
  • 應用配置文件加密存儲(Vault/KMS),代碼倉庫嚴禁明文密碼

策略四:加密傳輸通道,防止流量劫持

-- 1. 生成 SSL 憑證
mysql_ssl_rsa_setup --uid=mysql

-- 2. 配置強制 SSL
[mysqld]
require_secure_transport = ON
ssl_ca = /var/lib/mysql/ca.pem
ssl_cert = /var/lib/mysql/server-cert.pem
ssl_key = /var/lib/mysql/server-key.pem

-- 3. 用戶強制 SSL
ALTER USER 'app_user'@'%' REQUIRE SSL;

-- 4. 客戶端驗證
mysql -u app_user -p --ssl-mode=VERIFY_IDENTITY --ssl-ca=ca.pem

或使用 SSH 隧道:ssh -L 3307:localhost:3306 user@db-host,應用連 127.0.0.1:3307。

策略五:禁用/限制遠程訪問,縮小攻擊面

-- 1. 僅監聽本地/內網 IP
[mysqld]
bind-address = 127.0.0.1  # 或 10.0.0.10

-- 2. 防火牆層面僅放行應用服務器 IP
iptables -A INPUT -p tcp -s 10.0.1.0/24 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP

-- 3. skip-networking(極端場景,僅本地 Unix Socket)

策略六:啟用審計日志,構建可追溯體系

-- 安裝審計插件(企業版/Percona/MariaDB 內置)
INSTALL PLUGIN audit_log SONAME 'audit_log.so';

-- 配置
[mysqld]
audit_log_policy = ALL
audit_log_format = JSON
audit_log_file = /var/log/mysql/audit.log
audit_log_rotate_on_size = 100M
audit_log_rotations = 10

重點監控:CONNECT 失敗嘗試、GRANT/DROP USER、TRUNCATE/DROP TABLE、非工作時間訪問。

策略七:持續化安全運營

  1. 定期輪換:密鑰/密碼 90 天輪換,自動化腳本推送
  2. 漏洞掃描:mysqlsecurer、Lynis 定期掃描 CIS Benchmark
  3. 版本更新:關注 mysql--release 安全公告,及時打補丁
  4. 應急預案:數據洩露/勒索軟件演練,備份離線存儲、不可篡改

安全基線檢查腳本

#!/bin/bash
echo "=== MySQL Security Baseline Check ==="
mysql -e "SELECT User, Host, plugin FROM mysql.user WHERE Host='%' OR Password='' OR authentication_string='';"
mysql -e "SHOW VARIABLES LIKE 'validate_password%';"
mysql -e "SHOW VARIABLES LIKE 'require_secure_transport';"
mysql -e "SHOW VARIABLES LIKE 'bind_address';"
ls -l /etc/my.cnf ~/.my.cnf 2>/dev/null
echo "Check audit.log rotation: $(ls -lh /var/log/mysql/audit.log* 2>/dev/null | head -5)"

安全無絕對,唯有纏鬥:通配符清理、強密碼、配置加密、傳輸加密、網絡隔離、審計日志、持續運營,七層防線守護核心資產。

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