GRANT/REVOKE 是操作授權表的前端介面,影響四張系統表:
| 表名 | 層級 | 說明 |
|---|---|---|
user | 全域 | 可連線的使用者帳號及其全域權限 (管理權限) |
db | 資料庫 | 特定資料庫的存取權限 |
tables_priv | 資料表 | 特定資料表的權限 |
columns_priv | 欄位 | 特定欄位的權限 |
host 表不受 GRANT/REVOKE 影響。直接操作授權表雖可行,但建議透過指令管理,並閱讀官方「安全性指南」理解底層機制。
GRANT 權限 [(欄位)] ON 物件 TO '使用者'@'主機' IDENTIFIED BY '密碼' [WITH GRANT OPTION]
| 分類 | 權限關鍵字 | 允許操作 |
|---|---|---|
| 資料/結構權限 | SELECT | 查詢資料 |
| INSERT | 新增資料 | |
| UPDATE | 修改資料 | |
| DELETE | 刪除資料 | |
| CREATE | 建立資料庫/資料表 | |
| DROP | 刪除資料庫/資料表 | |
| INDEX | 建立/刪除索引 | |
| ALTER | 修改資料表結構 | |
| 管理權限 | FILE | 讀寫伺服器檔案 |
| PROCESS | 檢視/終止執行緒 | |
| RELOAD | 重載授權表、清除快取 | |
| SHUTDOWN | 關閉伺服器 | |
| 特殊 | ALL [PRIVILEGES] | 所有權限 (除 GRANT OPTION) |
| 特殊 | USAGE | 無實質權限 (僅建立帳號) |
ON *.*:全域 (所有庫、所有表) — 管理權限只能用此範圍。ON db_name.*:資料庫層級 (該庫所有表)。ON db_name.tbl_name:資料表層級。ON db_name.tbl_name (col1, col2):欄位層級 (需在權限後加欄位清單)。格式:'user_name'@'host_spec'。MySQL 以「使用者+來源主機」唯一識別帳號,允許同名不同來源帳號共存。
'boris'@'localhost'、'fred'@'res.mars.com'%:'max'@'%' (任意主機,等同 'max') — 最不安全。'mary'@'%.snake.net''boris'@'192.168.128.3'、'fred'@'192.168.128.%'、'rex'@'192.168.128.0/17' (CIDR 表示法,MySQL 3.23+)。GRANT ... TO "my friend"@'boa.snake.net'IDENTIFIED BY 'plain_pwd':明文密碼,MySQL 自動加密儲存 (勿自行用 PASSWORD())。WITH GRANT OPTION:允許該帳號將自己擁有的權限再授予他人 (遞授權)。GRANT ALL ON *.* TO 'ethel'@'localhost' IDENTIFIED BY 'coffee' WITH GRANT OPTION;
GRANT RELOAD ON *.* TO 'flush_user'@'localhost' IDENTIFIED BY 'flushpass';
GRANT ALL ON samp_db.* TO 'bill'@'racer.snake.net' IDENTIFIED BY 'rock';
GRANT SELECT ON samp_db.* TO 'ro_user'@'%' IDENTIFIED BY 'rock';
GRANT SELECT, INSERT, UPDATE, DELETE ON samp_db.* TO 'app_user'@'snake.net' IDENTIFIED BY 'rock';
GRANT SELECT ON samp_db.member TO 'bill'@'localhost' IDENTIFIED BY 'rock';
GRANT UPDATE (expiration) ON samp_db.member TO 'bill'@'localhost'; -- 免再輸密碼
GRANT UPDATE (street, city, state, zip) ON samp_db.member TO 'assistant'@'localhost';
CREATE DATABASE tmp;
GRANT ALL ON tmp.* TO ''@'mars.net'; -- 匿名帳號,任何使用者皆可用 tmp.tbl_name
GRANT ALL ON sales.* TO 'alicia'@'%.big.corp.com' IDENTIFIED BY 'applejuice' WITH GRANT OPTION;
REVOKE 權限 [(欄位)] ON 物件 FROM '使用者'@'主機';
TO 改 FROM,無 IDENTIFIED BY 與 WITH GRANT OPTION。REVOKE 僅移除權限,user 表帳號紀錄保留 (仍可連線但無權操作)。user 表記錄並重載權限:DELETE FROM mysql.user WHERE User='user_name' AND Host='host_name';
FLUSH PRIVILEGES;
(GRANT/REVOKE 會自動重載,手動修改授權表需手動 FLUSH PRIVILEGES)。
MySQL 附贈 Perl 腳本 mysqlaccess、mysql_setpermission (需 DBI) 提供互動式帳號管理介面,可作為 GRANT 指令替代方案。