MySQL 權限控制核心在於 mysql 系統庫中的三張授權表:user、db、host(舊版本另有 tables_priv、columns_priv)。理解其層級檢查順序與 27 項細粒度權限,是實現最小權限部署的基礎。
user 表 Host、User、Password 三欄匹配。user 表權限欄位為 Y → 擁有所有庫所有權限,停止檢查。db 表匹配具體庫,取得 Y 權限。tables_priv 表匹配具體表。columns_priv 表匹配具體欄位。| # | 權限關鍵字 | 用途 | 授權範例 |
|---|---|---|---|
| 1 | USAGE | 僅連線權限(預設授予,不可回收) | GRANT USAGE ON *.* TO 'p1'@'localhost' IDENTIFIED BY '123'; |
| 2 | SELECT | 查詢資料 | GRANT SELECT ON pyt.* TO 'p1'@'localhost'; |
| 3 | CREATE | 建立表/索引 | GRANT CREATE ON pyt.* TO 'p1'@'localhost'; |
| 4 | CREATE ROUTINE | 建立預存程序/函數(自動附贈 EXECUTE、ALTER ROUTINE) | GRANT CREATE ROUTINE ON pyt.* TO 'p1'@'localhost'; |
| 5 | CREATE TEMPORARY TABLES | 建立臨時表 | GRANT CREATE TEMPORARY TABLES ON pyt.* TO 'p1'@'localhost'; |
| 6 | CREATE VIEW | 建立檢視表 | GRANT CREATE VIEW ON pyt.* TO 'p1'@'localhost'; |
| 7 | CREATE USER | 建立用戶(需 mysql 全庫 CREATE USER 或 INSERT 權限) | GRANT CREATE USER ON *.* TO 'p1'@'localhost'; |
| 8 | INSERT | 插入資料 | GRANT INSERT ON pyt.* TO 'p1'@'localhost'; |
| 9 | ALTER | 修改表結構 | GRANT ALTER ON pyt.* TO 'p1'@'localhost'; |
| 10 | ALTER ROUTINE | 修改/刪除預存程序/函數 | GRANT ALTER ROUTINE ON pyt.* TO 'p1'@'localhost'; |
| 11 | UPDATE | 更新資料 | GRANT UPDATE ON pyt.* TO 'p1'@'localhost'; |
| 12 | DELETE | 刪除資料 | GRANT DELETE ON pyt.* TO 'p1'@'localhost'; |
| 13 | DROP | 刪除庫/表/檢視/索引 | GRANT DROP ON pyt.* TO 'p1'@'localhost'; |
| 14 | SHOW DATABASES | 顯示所有資料庫(否則僅見有權限的庫) | GRANT SHOW DATABASES ON *.* TO 'p1'@'localhost'; |
| 15 | SHOW VIEW | 執行 SHOW CREATE VIEW | GRANT SHOW VIEW ON pyt.* TO 'p1'@'localhost'; |
| 16 | EXECUTE | 執行預存程序/函數 | (通常由 CREATE ROUTINE 自動授予) |
| 17 | FILE | LOAD DATA INFILE / SELECT INTO OUTFILE | GRANT FILE ON *.* TO 'p1'@'localhost'; |
| 18 | INDEX | 建立/刪除索引 | GRANT INDEX ON pyt.* TO 'p1'@'localhost'; |
| 19 | LOCK TABLES | 鎖定表 | GRANT LOCK TABLES ON pyt.* TO 'p1'@'localhost'; |
| 20 | PROCESS | 查看所有執行緒 | GRANT PROCESS ON *.* TO 'p1'@'localhost'; |
| 21 | RELOAD | FLUSH 操作 | GRANT RELOAD ON *.* TO 'p1'@'localhost'; |
| 22 | REPLICATION CLIENT | 查看主從狀態 | GRANT REPLICATION CLIENT ON *.* TO 'p1'@'localhost'; |
| 23 | REPLICATION SLAVE | 從庫複制權限 | GRANT REPLICATION SLAVE ON *.* TO 'p1'@'localhost'; |
| 24 | SHUTDOWN | 關閉伺服器 | GRANT SHUTDOWN ON *.* TO 'p1'@'localhost'; |
| 25 | SUPER | KILL 執行緒、修改全域變數等 | GRANT SUPER ON *.* TO 'p1'@'localhost'; |
| 26 | REFERENCES | 外鍵引用(預留) | GRANT REFERENCES ON pyt.* TO 'p1'@'localhost'; |
| 27 | ALL PRIVILEGES | 除 GRANT OPTION 外所有權限 | GRANT ALL PRIVILEGES ON pyt.* TO 'p1'@'localhost'; |
USAGE 僅代表「能連線」,不含任何操作權限,且 REVOKE 無法移除用戶,需 DROP USER。CREATE ROUTINE 授予時自動附贈 EXECUTE、ALTER ROUTINE 給建立者。SHOW DATABASES 全域權限決定是否可見 mysql 等系統庫。USE db 生效