核心原則:纏繞防禦,最小權限
資料庫安全非單一設定可解,需從帳號、網路、檔案系統、審計多層面佈防。
一、 強制密碼策略
- 所有帳號必須設定強密碼,禁用匿名帳號、空密碼帳號。
- 定期輪換密碼,尤其
root、admin 等高權限帳號。
- 修改密碼推薦使用
SET PASSWORD 或 ALTER USER,避免直接操作 mysql.user 表。
-- 推薦方式 (MySQL 5.7+)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStr0ngP@ss!';
FLUSH PRIVILEGES;
二、 服務帳號隔離
- 嚴禁以 OS root/Administrator 執行 mysqld,否則
FILE 權限可寫入系統關鍵檔案 (如 /root/.bashrc)。
- 建立專用
mysql 系統帳號,僅擁有資料目錄讀寫權限。
/etc/my.cnf 或 my.ini 中固化:
[mysqld]
user=mysql
三、 禁用危險功能
| 功能 | 風險 | 禁用方式 |
| 符號連結 | root 執行時可刪除任意系統檔案 | --skip-symbolic-links |
| LOAD DATA LOCAL | 可讀取伺服器任意可讀檔案 (如 /etc/passwd) | local-infile=0 |
| SELECT ... INTO OUTFILE | 可寫入伺服器檔案系統 | 僅授予可信帳號 FILE 權限 |
四、 權限最小化矩陣
| 權限 | 僅授予 | 風險說明 |
| SUPER | DBA / 監控帳號 | 可 KILL 連線、修改全域變數、控制複寫 |
| PROCESS | 監控工具 | SHOW PROCESSLIST 可見敏感 SQL (含明文密碼) |
| FILE | 備份/ETL 專用帳號 | 可讀寫伺服器檔案系統 |
| CREATE USER | 帳號管理角色 | 可建立/刪除帳號 |
五、 網路層防護
- 僅在
127.0.0.1 或內網 VIP 監聽:bind-address=192.168.1.10
- 防火牆僅開放應用伺服器 IP 存取 3306。
- 授權表使用 IP 而非主機名,避免 DNS 劫持:
GRANT ... TO 'app'@'10.0.1.%'
- 啟用 SSL 傳輸:
require_secure_transport=ON
六、 審計與監控
- 啟用
log-raw、log_slow_queries、log_error。
- 部署
MariaDB Audit Plugin 或 MySQL Enterprise Audit 記錄所有 DML/DDL。
- 定期審核
mysql.user、db、tables_priv 異常授權。
七、 連線數限制
[mysqld]
max_user_connections = 200 -- 單帳號最大連線
max_connections = 1000 -- 全域最大連線
防止單一失控應用耗盡連線池導致拒絕服務。
結語
安全是持續過程,而非一次性配置。建議每季度執行:密碼輪換、權限收攏、審計日誌分析、滲透測試。
copyright ©
萬盛學電腦網 all rights reserved