| 方案 | 適用場景 | 配置複雜度 |
|---|---|---|
| SSL/TLS (MySQL 內建) | 跨網段、雲資料庫、合規要求 | 中 (需憑證管理) |
| SSH Tunnel | 運維連線、跨機房、簡易部署 | 低 |
| VPN/私有網路 | 企業內網、K8s Pod 網路 | 基礎設施層 |
| 原則 | 具體執行 |
|---|---|
| 全員強制密碼 | ALTER USER 'user'@'host' IDENTIFIED BY 'strong_pwd'; 定期輪換 |
| 禁止 root 遠端 | DELETE FROM mysql.user WHERE User='root' AND Host!='localhost'; FLUSH PRIVILEGES; |
| 匿名帳號清理 | DROP USER ''@'%'; DROP USER ''@'localhost'; |
| 測試庫移除 | DROP DATABASE test; DELETE FROM mysql.db WHERE Db LIKE 'test%'; |
| 應用帳號最小權限 | 僅 SELECT/INSERT/UPDATE/DELETE 業務庫,無 DROP/ALTER/GRANT |
| FILE 權限極嚴控 | 僅備份/匯入帳號持有,防 LOAD_FILE('/etc/passwd') |
| PROCESS/SUPER 僅 DBA | 防查看他人查詢文本、修改全域變數、控制複寫 |
| 連線數配額 | GRANT ... WITH MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 10 |
useradd -r -s /sbin/nologin mysql,chown -R mysql:mysql /var/lib/mysql。--skip-symbolic-links (MyISAM) / innodb_file_per_table 避免目錄遍歷。bind-address = 10.0.0.10 (僅內網管理 IP)。iptables -A INPUT -s 10.0.0.0/8 -p tcp --dport 3306 -j ACCEPT,其餘 DROP。skip-name-resolve。general_log=ON (僅審計期啟用,高負載影響效能)。slow_query_log=1、long_query_time=1、log_queries_not_using_indexes=1。log_error=/var/log/mysql/error.log、log_warnings=2 (記錄 Aborted 連線)。RENAME USER/FLUSH HOSTS/防火牆封禁)。mysqlbinlog --stop-datetime)。MySQL 安全非單一設定,而是傳輸/帳號/OS/網路/審計/應用/響應七層纵深體系。將基線編碼為 IaC (Ansible/Terraform/Helm),納入 CI/CD 掃描門檻,定期紅隊演練,方能構建可信賴的資料庫安全態勢。