MySQL 3.22.11 引入 GRANT(建立用戶、授權)與 REVOKE(撤銷權限),作為直接操作授權表的前端介面。影響四張核心授權表:
| 授權表 | 內容 |
|---|---|
user | 可連線用戶及其全域權限(管理權限、跨庫權限) |
db | 資料庫級權限 |
tables_priv | 表級權限 |
columns_priv | 欄位級權限 |
第五張表 host 不受 GRANT/REVOKE 影響。建議深讀《MySQL 安全性指南》理解底層表結構,超越 GRANT/REVOKE 功能層面。
GRANT privileges [(columns)] ON what TO user IDENTIFIED BY "password" [WITH GRANT OPTION]
| 指定符 | 允許操作 |
|---|---|
| ALTER | 修改表與索引 |
| CREATE | 建立資料庫與表 |
| DELETE | 刪除表記錄 |
| DROP | 刪除資料庫與表 |
| INDEX | 建立/刪除索引 |
| INSERT | 插入新行 |
| REFERENCES | 保留未用 |
| SELECT | 查詢記錄 |
| UPDATE | 修改現有記錄 |
| FILE | 讀/寫伺服器檔案 |
| PROCESS | 檢視/終止執行緒 |
| RELOAD | 重載授權表、清空日誌/快取 |
| SHUTDOWN | 關閉服務器 |
| ALL | 所有權限(= ALL PRIVILEGES) |
| USAGE | 特殊「無權限」權限(僅建立用戶) |
第一組適用庫/表/欄位;第二組為管理權限,嚴格授予;第三組特殊:ALL=全給,USAGE=只建用戶不給權。
欄位級權限,多欄位逗號分隔。
ON *.*ON db_name.*ON db_name.tbl_namecolumns 子句即為欄位級。格式:'user_name'@'host_name'。MySQL 同時限定「誰」與「從哪裡連」,允許同名用戶從不同主機連線並獨立授權。用戶名非系統登入名,預設客戶端用登入名,可任意指定(如 nobody)。
新用戶必須指定 IDENTIFIED BY,否則無密碼(不安全)。現有用戶指定則覆蓋舊密碼,不指定則保留。GRANT 會自動加密,勿像 SET PASSWORD 那樣用 PASSWORD() 函數。
允許該用戶將自身擁有的權限再授予他人。
MySQL Access 與 mysql_setpermission(Perl 腳本,需 DBI)提供圖形/腳本化授權介面。