「最小權限原則」人人會說,但具體如何落地?本文系統梳理 MySQL 四張權限表驗證邏輯、權限分類、數據庫層權限矩陣,並給出生產環境 9 項安全配置清單與入侵提權分析,助你構建「既安全又能跑」的 MySQL 權限體系。
| 角色 | 建議權限 | 說明 |
| 只讀賬號 | SELECT | 報表、備份、只讀服務 |
| 開發/測試 | SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER | 日常開發所需,無管理權限 |
| 應用賬號 | SELECT, INSERT, UPDATE, DELETE, EXECUTE | 視業務精簡,原則上不給 DROP/ALTER |
| 遷移/同步 | REPLICATION SLAVE / CLIENT | 專用複制賬號 |
四、生產環境 9 項安全配置清單
- 網絡層隔離:防火牆/iptables 僅放行應用服務器 IP 訪問 3306。
- 修改默認端口:
my.cnf 設 port=xxxx,降低掃描風險。
- 強密碼 + 指定 Host:
CREATE USER 'app'@'10.0.0.%' IDENTIFIED BY 'StrongPass!'; 禁止 %。
- Root 鎖死:強密碼 +
host='localhost' 或 127.0.0.1,禁用遠程登錄。
- 審計日誌:啟用
general_log 或审计插件,記錄登錄與敏感操作。
- 進程用戶最小化:Linux 用專用
mysql 用戶運行,目錄權限 750,data 目錄 770;Windows 用 Network Service 或專用賬號。
- 磁盤權限收緊:運行用戶無網站目錄寫入/執行權,無 cmd/sh 執行權。
- 應用賬號「單庫全權」:
GRANT ALL ON app_db.* TO 'app'@'10.0.%'; 自動排除 SUPER/FILE 等管理權限,兼顧便利與安全。
- 清理無用庫:刪除
test 庫(新用戶默認有權限)。
五、常見提權路徑與防禦
| 路徑 | 關鍵條件 | 防禦核心 |
| UDF 提權 | 導入惡意 DLL | 進程用戶無數據目錄寫入權 + 禁用 plugin_dir 寫入 |
| 寫啟動項 | 進程用戶有啟動目錄寫入權 | 同上,收緊目錄權限 |
| Root 洩露 | Root 弱口令/遠程登錄 | 強密碼 + 僅本地 + 進程用戶低權限兜底 |
| 普通賬號洩露 (注入/服務器被控) | 應用賬號密碼外泄 | 單庫全權 + 無 FILE 權限 + 進程用戶低權限,限制損失範圍 |
六、常用權限管理命令速查
-- 新建用戶並授權單庫全權
GRANT ALL PRIVILEGES ON db.* TO 'user'@'host' IDENTIFIED BY 'pass';
-- 僅授權增刪改查
GRANT SELECT,INSERT,UPDATE,DELETE ON db.* TO 'user'@'host' IDENTIFIED BY 'pass';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'user'@'host';
REVOKE DELETE ON *.* FROM 'jack'@'localhost';
DROP USER 'jack'@'localhost';
RENAME USER 'jack'@'%' TO 'jim'@'%';
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
DROP DATABASE test;
SELECT * FROM t INTO OUTFILE '/tmp/out.csv'; -- 需 FILE 權限
總結
MySQL 權限體系以四表級聯驗證為核心,生產配置應遵循「網絡隔離、最小權限、專用賬號、進程低權、審計可追溯」五大原則。定期 SHOW GRANTS 掃描異常授權,保持權限面收斂。
- 上一篇文章: C# 與 MySQL 中文存取防亂碼指南:Unicode 編碼全鏈路實踐
- 下一篇文章: MySQL 瘦身實戰:5 大維度壓縮磁盤佔用,單表省 18GB 不是夢
Copyright ©
程式碼之家 All Rights Reserved