MySQL 採用非標準但靈活的權限體系,核心為 mysql 庫下五張表(安裝時由 mysql_install_db 初始化):
user:全局權限、用戶認證db:庫級權限host:配合 db 實現主機級精細控制tables_priv:表級權限columns_priv:列級權限注意:無 rows_priv,行級需應用層實現或用 GET_LOCK()。
SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER、INDEX、REFERENCES(保留)
FILE(高危,慎授)、GRANT、PROCESS、RELOAD、SHUTDOWN
管理權限僅存在 user 表,因屬服務器級操作。
| 列 | 類型 | 通配符 | 特殊規則 |
|---|---|---|---|
| Host | CHAR(60) | %、_、IP/掩碼 (192.168.0.0/17) | 空值=%;拒絕數字開頭主機名匹配 IP 通配符 |
| User | CHAR(16) | 無(% 視為字面值) | 空值=匿名用戶 |
| Password | CHAR(16) | 不允許 | 存儲加密值;空值=無需密碼 |
| Db | CHAR(64/60) | db/host 表支援 %、_ | tables_priv/columns_priv 僅字面值 |
user 表並按「具體優先」排序:Host 字面值 > 通配符;同 Host 下 User 字面值 > 空值user 表user 全局權限 → 不足則查 db+host → 再查 tables_priv/columns_priv服務器啟動時讀取並排序授權表。mysqlaccess 腳本可輔助診斷(僅檢查 user/db/host)。
FILE、GRANT、SHUTDOWN 等高危權限FILE 寫入範圍GRANT/REVOKE 而非直接改表,確保緩存同步user 表匿名帳號、空密碼帳號