建立多層次的 MySQL 安全防線
隨著網路應用普及,資料庫安全至關重要。MySQL 提供帳號認證、細粒度權限控制、SSL 加密傳輸等機制,本文詳細說明配置要點。
1. 帳號與認證機制
MySQL 帳號由 `用戶名`、`密碼`、`來源位置` 三元組構成。同一用戶從不同主機連線可擁有不同權限與密碼:
GRANT SELECT ON db1.* TO 'user'@'host1' IDENTIFIED BY 'pwd1';
GRANT SELECT ON db2.* TO 'user'@'host1' IDENTIFIED BY 'pwd2';
此機制可實現同用戶分庫不同密碼,限制存取範圍。
2. 三層安全檢查
- 登錄驗證: 驗證用戶名/密碼。
- 授權檢查: 登入後依權限表判斷操作權限(如 `DROP`、`CREATE`)。
- 訪問控制: 針對具體資料表/欄位的操作權限(`SELECT`、`INSERT`、`UPDATE`、`DELETE`、`INDEX`、`ALTER` 等)。
3. 關鍵權限說明
| 權限 | 說明 | 風險等級 |
| FILE | 執行 `LOAD DATA INFILE`,可讀取伺服器任意檔案 | 高危 |
| GRANT | 將自身權限授予他人 | 高危 |
| SHUTDOWN | 關閉 MySQL 服務 | 高危 |
| PROCESS | 查看/終止其他連線的執行緒 | 中危 |
| SUPER | 終止任意查詢、修改全域變數 | 高危 |
| RELOAD | 執行 `FLUSH` 指令 | 中危 |
高危權限嚴格限制授予,遵循最小權限原則。
4. SSL 加密傳輸配置
MySQL 4.1+ 支援 OpenSSL。預設未啟用,需編譯或配置開啟:
SHOW VARIABLES LIKE 'have_openssl'; -- 檢查是否支援
強制特定帳號使用 SSL 連線:
GRANT ALL ON db.* TO 'user'@'%' IDENTIFIED BY 'pwd' REQUIRE SSL;
-- 或要求客戶端憑證
GRANT ALL ON db.* TO 'user'@'%' IDENTIFIED BY 'pwd' REQUIRE X509;
-- 指定主體/簽發者/加密套件
GRANT ALL ON db.* TO 'user'@'%' IDENTIFIED BY 'pwd'
REQUIRE SUBJECT '/CN=client' ISSUER '/CN=ca' CIPHER 'EDH-RSA-DES-CBC3-SHA';
5. 權限表維護
權限資料儲存於 `mysql` 資料庫的 MyISAM 表中(`user`、`db`、`tables_priv` 等)。可直接用 SQL 管理,但操作需極度謹慎,錯誤修改可能導致服務癱瘓或權限失控。
最佳實踐: 定期審計帳號、移除匿名帳號、強制強密碼、啟用 SSL、限制來源 IP、最小化權限授予。
- 上一篇文章: MySQL 注入導出 WebShell 技術原理分析與防禦對策
- 下一篇文章: 使用 HAProxy 實現 MySQL 複制延遲感知的負載均衡
Copyright ©
程式碼之家 All Rights Reserved