MySQL 權限驗證遵循 從全局到局部、層層疊加 原則:
| 表名 | 範圍 | 關鍵列 | 修改方式 | 說明 |
|---|---|---|---|---|
| user | 全局 (實例級) | Host、User、Password、全局權限列 (Select_priv...) | GRANT/REVOKE ON *.* | 登入驗證、全局權限、資源限制、SSL/TLS |
| db | 資料庫級 | Host、Db、User、庫級權限列 | GRANT/REVOKE ON db.* | 特定庫的操作權限 |
| tables_priv | 表級 | Host、Db、User、Table_name、Table_priv、Column_priv | GRANT/REVOKE ON db.tbl | 特定表的操作權限 |
| columns_priv | 列級 | Host、Db、User、Table_name、Column_name、Column_priv | GRANT/REVOKE ON db.tbl(col) | 特定列的操作權限 |
| procs_priv | 存儲過程/函數級 | Host、Db、User、Routine_name、Routine_type、Proc_priv | GRANT/REVOKE ON PROCEDURE/FUNCTION | 執行/修改存儲程序權限 (5.0+) |
註: host 表輔助 db 表控制特定主機的庫級權限,不受 GRANT/REVOKE 影響,極少直接操作。
權限 適用範圍 操作示例 風險等級
SELECT 全局/庫/表/列 SELECT * FROM tbl 低
INSERT/UPDATE/DELETE 全局/庫/表/列 DML 操作 中
CREATE/DROP/ALTER/INDEX 全局/庫/表 DDL 操作 高
CREATE TEMPORARY TABLES 全局/庫 CREATE TEMPORARY TABLE 中
EXECUTE 全局/庫/過程 CALL proc() 中
FILE 全局 LOAD DATA INFILE、SELECT ... INTO OUTFILE 極高 (讀寫服務器文件)
GRANT OPTION 全局/庫/表 將自己權限授予他人 高 (權限傳遞)
LOCK TABLES 全局/庫/表 LOCK TABLES tbl READ/WRITE 中
PROCESS 全局 SHOW PROCESSLIST、KILL (5.1+ 需 SUPER) 中
RELOAD 全局 FLUSH、RESET、mysqladmin reload/flush-* 高
REPLICATION CLIENT/SLAVE 全局 SHOW MASTER/SLAVE STATUS、複制連接 高
SHOW DATABASES 全局 SHOW DATABASES 低
SUPER 全局 KILL、SET GLOBAL、CHANGE MASTER、PURGE BINLOG、DEBUG 極高 (實例級控制)
CREATE USER 全局 CREATE/RENAME/DROP USER 高
ALL PRIVILEGES 對應範圍 該範圍所有權限 (除 GRANT OPTION) 極高
SSL/TLS 加密連接控制 (user 表 ssl_type 欄位)
| ssl_type 值 | 含義 | GRANT 子句 |
|---|---|---|
| NONE (預設) | 不要求加密 | |
| ANY | 要求加密,任意類型 | REQUIRE SSL |
| X509 | 要求加密 + 客戶端憑證 | REQUIRE X509 |
| SPECIFIED | 要求加密 + 指定簽發者/主體/加密套件 | REQUIRE ISSUER/SUBJECT/CIPHER |
max_questions:每小時最大查詢數max_updates:每小時最大更新數max_connections:每小時最大連接數max_user_connections:同時最大連接數 (全局變量也可控制)*.* → user 表;db.* → db 表;db.tbl → tables_priv;db.tbl(col) → columns_privFLUSH PRIVILEGES 隱式執行)