MySQL 權限系統以 GRANT 授權、REVOKE 回收為核心。本文系統整理授權語法、權限層級、密碼管理、WITH GRANT OPTION 傳遞權限、撤銷權限與徹底刪除使用者的完整操作指南。
GRANT privileges ON db.tbl TO 'user'@'host' [IDENTIFIED BY 'pass'] [WITH GRANT OPTION] [resource_limits];
| 權限 | 說明 |
|---|---|
| ALL PRIVILEGES | 除 GRANT OPTION 外所有權限 |
| SELECT/INSERT/UPDATE/DELETE | DML 基礎權限 |
| CREATE/DROP/ALTER/INDEX | DDL 結構權限 |
| EXECUTE | 執行存儲過程/函數 |
| FILE | LOAD DATA INFILE / SELECT INTO OUTFILE |
| RELOAD/SHUTDOWN/PROCESS/SUPER | 管理權限(慎授) |
| REPLICATION SLAVE/CLIENT | 主從同步權限 |
| CREATE USER | 建立/刪除/重命名使用者 |
-- 全庫全表唯讀
GRANT SELECT ON *.* TO 'readonly'@'%' IDENTIFIED BY 'pass';
-- 特定庫讀寫
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app'@'10.0.0.%' IDENTIFIED BY 'pass';
-- 全權限且可再授權
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'pass' WITH GRANT OPTION;
-- 僅管理權限(無數據權限)
GRANT RELOAD, PROCESS ON *.* TO 'monitor'@'localhost';
-- 指定用戶(管理員)
SET PASSWORD FOR 'user'@'host' = PASSWORD('newpass');
-- 當前用戶
SET PASSWORD = PASSWORD('newpass');
-- GRANT 方式(不改權限只改密碼)
GRANT USAGE ON *.* TO 'user'@'host' IDENTIFIED BY 'newpass';
ALTER USER 'user'@'host' IDENTIFIED BY 'newpass';
擁有 WITH GRANT OPTION 的用戶,可將自己擁有的權限授予他人。極度謹慎授予,建議僅限 DBA 帳號。
REVOKE privileges ON db.tbl FROM 'user'@'host';
REVOKE 僅移除權限,**不刪除使用者帳號**(mysql.user 記錄保留)。REVOKE INSERT, UPDATE ON mydb.* FROM 'app'@'%';
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'admin'@'%';
DROP USER 'user'@'host';
DELETE FROM mysql.user WHERE User='user' AND Host='host';
FLUSH PRIVILEGES;
GRANT/REVOKE:即時生效,自動 FLUSH PRIVILEGES。mysql.user/db/tables_priv/columns_priv/procs_priv 表:需手動 FLUSH PRIVILEGES。FLUSH PRIVILEGES 後新連線生效。SELECT/INSERT/UPDATE/DELETE。'app'@'10.0.1.%' 優於 'app'@'%'。SELECT User, Host FROM mysql.user WHERE User NOT IN ('root','mysql.sys','mysql.session');root 遠程:DELETE FROM mysql.user WHERE User='root' AND Host='%';validate_password 強制密碼複雜度。權限管理是資料庫安全的核心,建立標準化授權/回收/刪除 SOP,並納入變更管理流程,才能守住資料最後一道防線。