| 權限 | 允許操作 | 備註 |
|---|---|---|
ALTER | ALTER TABLE | 需搭配其他權限 (如 CREATE/INSERT) 才能實際執行變更 |
CREATE | 建立資料庫、資料表 | 不含建立索引 |
DELETE | 刪除資料列 | |
DROP | 刪除資料庫、資料表 | 不含刪除索引 |
INDEX | 建立/刪除索引 | |
REFERENCES | 保留 (外鍵參考) | 目前未啟用 |
SELECT | 查詢資料 | 不涉及表的 SELECT (如 SELECT NOW()) 不需此權限 |
UPDATE | 修改現有資料列 |
| 權限 | 允許操作 | 風險與建議 |
|---|---|---|
FILE | LOAD DATA INFILE、SELECT ... INTO OUTFILE 讀寫伺服器檔案 | 高風險:可讀 /etc/passwd、寫任意可寫路徑。**禁用或僅授信任管理帳號**。 啟動 mysqld 勿用 root,限制檔案系統存取範圍。 |
GRANT | 將自身權限授予他人 (含 GRANT 權限本身) | 極高風險,僅限超級管理員 |
PROCESS | SHOW PROCESSLIST、mysqladmin process、KILL 任意執行緒 | 可見所有連線查詢文本 (含敏感 SQL),謹慎授予 |
RELOAD | FLUSH *、mysqladmin reload/refresh/flush-* | 影響伺服器運行狀態,僅限運維帳號 |
SHUTDOWN | mysqladmin shutdown 關閉伺服器 | 拒絕服務風險,極度限制 |
user、db、host 表:每個權限對應一個 ENUM('N','Y') 欄位 (如 Select_priv)。tables_priv、columns_priv:權限欄位為 SET 型態 (如 Table_priv = 'Select,Insert,Update')。user:Host、User、Passworddb:Host、Db、Userhost:Host、Db (輔助 db 表做更細主機控制)tables_priv:Host、Db、User、Table_namecolumns_priv:Host、Db、User、Table_name、Column_nameServer 依據連線來源 IP、用戶名、資料庫、表、欄位層層匹配範圍欄位,合併權限欄位決定最終授權。
-- 僅授讀寫特定表
GRANT SELECT, INSERT, UPDATE ON erp.orders TO 'app_user'@'10.0.1.%';
-- 唯讀分析帳號
GRANT SELECT ON dw.* TO 'analyst'@'10.0.2.%';
-- 禁止危險權限
REVOKE FILE, PROCESS, SUPER, SHUTDOWN ON *.* FROM 'app_user'@'%';