MySQL 通過 mysql 系統庫中的五張授權表實現精細化權限控制,權限檢查遵循「由全域到局部、由粗到細」的層級遞進邏輯。
| 表名 | 作用域 | 核心功能 | 特殊欄位 |
|---|---|---|---|
user |
全域(伺服器級) | 決定用戶能否連線,定義全域權限(如 SUPER, FILE) |
Host, User, Password + 30+ 權限欄位 |
db |
資料庫級 | 控制「哪個用戶、從哪個主機、能訪問哪個資料庫」 | Host, Db, User + 權限欄位 |
host |
資料庫級輔助 | 擴充 db 表:當 db.Host 為空時,查詢此表匹配具體主機 |
Host, Db + 權限欄位 |
tables_priv |
資料表級 | 針對特定表的權限(SELECT, INSERT, UPDATE...) | Table_name, Grantor, Timestamp |
columns_priv |
欄位級 | 針對特定表特定欄位的權限 | Column_name, Timestamp |
user 表 → 允許連線 + 獲得全域權限db → host → tables_priv → columns_privdb 或 tables_priv 級別,避免寫入 user 表。SELECT * FROM mysql.user WHERE User != 'root'; 檢查無用帳號。GRANT/REVOKE 自動生效。global_grants, role_edges 等新表,支援角色體系。「授權表只能用 GRANT 修改」——錯。超級用戶可直接
INSERT/UPDATE/DELETE授權表,但必須執行FLUSH PRIVILEGES才生效。這在批量初始化權限時很有用。