GRANT/REVOKE 操作四張授權表:user(全域/連線)、db(資料庫級)、tables_priv(資料表級)、columns_priv(欄位級)。另有 host 表不受 GRANT 影響。
GRANT privileges (columns)
ON what
TO user IDENTIFIED BY "password"
WITH GRANT OPTION
| 群組 | 權限關鍵字 | 說明 | 層級 |
|---|---|---|---|
| 資料操作 | SELECT | 讀取資料 | 資料庫/表/欄位 |
| INSERT | 新增資料 | 資料庫/表/欄位 | |
| UPDATE | 修改資料 | 資料庫/表/欄位 | |
| DELETE | 刪除資料 | 資料庫/表/欄位 | |
| CREATE | 建立資料庫/表/索引 | 資料庫/表/索引 | |
| DROP | 刪除資料庫/表 | 資料庫/表 | |
| INDEX | 建立/刪除索引 | 表 | |
| 結構變更 | ALTER | 修改表結構 | 表 |
| CREATE TEMPORARY TABLES | 建立臨時表 | 資料庫 | |
| LOCK TABLES | 鎖定表 | 資料庫 | |
| REFERENCES | 外鍵參考 | 資料庫/表 | |
| 管理權限 | FILE | 讀寫伺服器檔案 | 全域 |
| PROCESS | 檢視執行緒 | 全域 | |
| RELOAD | 重載授權表/日誌 | 全域 | |
| SHUTDOWN | 關閉伺服器 | 全域 | |
| SUPER | 執行 KILL、CHANGE MASTER 等 | 全域 | |
| 特殊 | ALL [PRIVILEGES] | 所有權限(除 GRANT OPTION) | - |
| USAGE | 無實際權限(僅建立帳號) | - |
GRANT ALL ON db.* TO 'user'@'localhost' IDENTIFIED BY 'pwd';GRANT ALL ON db.* TO 'user'@'%' IDENTIFIED BY 'pwd';GRANT ALL ON db.* TO 'user'@'%.example.com' IDENTIFIED BY 'pwd';GRANT ALL ON db.* TO 'user'@'192.168.1.%' IDENTIFIED BY 'pwd';GRANT ALL ON db.* TO 'user'@'192.168.1.0/255.255.255.0' IDENTIFIED BY 'pwd';GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'strong_pwd' WITH GRANT OPTION;
GRANT RELOAD ON *.* TO 'flush_user'@'localhost' IDENTIFIED BY 'pwd';
GRANT SELECT ON db_name.* TO 'readonly'@'%' IDENTIFIED BY 'pwd';
GRANT SELECT ON db.member TO 'user'@'localhost' IDENTIFIED BY 'pwd';
GRANT UPDATE (expiration) ON db.member TO 'user'@'localhost';
多欄位:GRANT UPDATE (street,city,zip) ON db.member TO 'user'@'localhost';
GRANT ALL ON tmp.* TO ''@'internal.net';
允許內網任何用戶使用 tmp 庫建臨時表,不影響核心業務權限。
REVOKE UPDATE ON db.member FROM 'user'@'localhost';
REVOKE ALL ON *.* FROM 'user'@'%';
DROP USER 'user'@'host'; -- MySQL 5.0.2+
-- 或
DELETE FROM mysql.user WHERE User='user' AND Host='host';
FLUSH PRIVILEGES;
mysqlaccess:命令列權限檢查工具mysql_setpermission:Perl 互動式授權腳本(需 DBI)@'%',優先 @'localhost' 或具體 IPSHOW GRANTS FOR 'user'@'host';