| 權限 | 作用範圍 | 說明 |
|---|---|---|
| ALTER | 表 | 允許 ALTER TABLE,需配合其他權限使用 |
| CREATE | 庫/表 | 創建資料庫/表,不含索引創建 |
| DELETE | 表 | 刪除記錄 |
| DROP | 庫/表 | 刪除資料庫/表,不含索引 |
| INDEX | 表 | 創建/刪除索引 |
| SELECT | 表 | 查詢數據,不涉及表的 SELECT 不受限 |
| UPDATE | 表 | 修改記錄 |
| 權限 | 風險等級 | 核心能力 |
|---|---|---|
| FILE | 極高 | 讀寫伺服器主機文件,可導致 /etc/passwd 洩露或數據目錄被竊 |
| GRANT | 高 | 將自身權限授予他人,含遞授權 |
| PROCESS | 中 | 查看/殺死所有線程(SHOW PROCESSLIST、KILL) |
| RELOAD | 中 | 執行 FLUSH、mysqladmin reload/flush-* |
| SHUTDOWN | 高 | 關閉服務器 |
user 表中的 Host、User、Password,失敗即拒絕連接user → db → tables_priv → columns_priv,權限以 OR 邏輯疊加實際授權邏輯:user OR (db AND host) OR tables_priv OR columns_priv。host 表不受 GRANT/REVOKE 影響,配合 db 實現主機級精細控制。
%、_、CIDR 表示法(如 192.168.128.0/17)% 為字面值而非通配符匹配順序:具體值優先於通配符,如 client.your.net 優先於 %.your.net 優先於 %。
CREATE TABLE etc_passwd (pwd_entry TEXT);
LOAD DATA INFILE "/etc/passwd" INTO TABLE etc_passwd;
SELECT * FROM etc_passwd;
防範:嚴禁授予 FILE,數據目錄權限設為 700,啟動參數加 --skip-show-database。
惡意用戶可 ALTER TABLE t2 RENAME TO t1 竊取數據。防範:最小權限原則,避免直接授予 ALTER。
兩個擁有 GRANT 的用戶可互相提權。防範:user 表僅保留超級管理員,業務權限下放至 db、tables_priv、columns_priv。
服務啟動時將授權表載入記憶體,直接修改表(INSERT/UPDATE)不生效。必須執行:
FLUSH PRIVILEGES;
-- 或
mysqladmin flush-privileges / reload
MySQL 安全核心在於:文件系統鎖定數據目錄、授權表最小權限分配、禁用高危全局權限、理解雙階段驗證邏輯、及時刷新權限快取。定期審計 mysql.user 表,清理匿名帳號與過期權限。