GRANT 是 MySQL 授權的核心指令,支援細粒度到欄位層級的權限控管。本文完整列出 14 種標準權限、管理權限、特殊權限,並說明主機匹配規則、密碼設定與常見授權範本。
| 權限 | 適用層級 | 說明 |
|---|---|---|
| SELECT | 表、欄位 | 查詢資料 |
| INSERT | 表、欄位 | 新增資料 |
| UPDATE | 表、欄位 | 修改資料 |
| DELETE | 表 | 刪除資料 |
| CREATE | 庫、表 | 建立資料庫/表 |
| DROP | 庫、表 | 刪除資料庫/表 |
| INDEX | 表 | 建立/刪除索引 |
| ALTER | 表 | 修改表結構 |
| GRANT | 庫、表 | 授權給他人 |
| REFERENCES | 表、欄位 | 外鍵參考 |
| RELOAD | 全域 | 重載授權表、刷新日誌 |
| SHUTDOWN | 全域 | 關閉服務 |
| PROCESS | 全域 | 檢視/終止所有執行緒 |
| FILE | 全域 | 讀寫伺服器檔案 (LOAD DATA/SELECT INTO OUTFILE) |
CREATE TEMPORARY TABLES、LOCK TABLES、REPLICATION CLIENT、REPLICATION SLAVE、SHOW DATABASES、SUPER (Kill 任何執行緒、變更全域變數)。ALL / ALL PRIVILEGES:除 GRANT OPTION 外所有權限。USAGE:僅允許連線,無任何操作權 (建立帳號預設)。GRANT 權限1,權限2,... ON 資料庫.表 TO '用戶'@'主機' IDENTIFIED BY '密碼';
主機:localhost (Unix socket)、127.0.0.1 (TCP)、IP、域名、% (通配任意)。localhost ≠ 127.0.0.1,需分別授權。密碼:不可為空,否則建立失敗。資料庫.表:*.* 代表全域;db.* 全庫;db.tbl 單表。-- 僅讀帳號 (任意主機)
GRANT SELECT ON prod.* TO 'readonly'@'%' IDENTIFIED BY 'StrongPass!23';
-- 開發帳號 (特定庫、DDL+DML)
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON devdb.* TO 'dev'@'192.168.1.%' IDENTIFIED BY 'DevPass!23';
-- 跨庫遷移帳號 (需 FILE 權限)
GRANT SELECT,FILE ON *.* TO 'migrate'@'10.0.0.5' IDENTIFIED BY 'MigPass!23';
-- 刪除用戶 (5.7+)
DROP USER 'olduser'@'%';