MySQL 權限系統基於「主機+用戶+密碼」三元組認證,權限分為全局、庫級、表級、列級四個層次。正確授權、及時刷新、遵循最小權限原則是資料庫安全的基石。本文梳理標準授權流程、常用權限組合、撤銷與審計技巧。
-- 1. 創建用戶 (推薦 8.0+ 語法)
CREATE USER 'liuyz'@'%' IDENTIFIED BY 'StrongPass#2025';
-- 2. 授權 (按需分配,避免 ALL PRIVILEGES)
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `biz_db`.* TO 'liuyz'@'%';
-- 3. 刷新生效 (8.0+ 隱式刷新,5.7 必須顯式執行)
FLUSH PRIVILEGES;
| 層次 | 語法示例 | 適用場景 |
|---|---|---|
| 全局 | GRANT RELOAD, PROCESS, REPLICATION CLIENT ON *.* TO 'monitor'@'%'; | 監控、備份、複製管理賬號 |
| 庫級 | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `app_db`.* TO 'app_rw'@'%'; | 應用讀寫賬號 (無 DDL 權限更安全) |
| 表級 | GRANT SELECT ON `app_db`.`sensitive_log` TO 'audit'@'%'; | 審計、數據導出賬號 |
| 列級 | GRANT SELECT (id, name, email) ON `app_db`.`users` TO 'api_user'@'%'; | 敏感字段隔離 (密碼哈希、身份證等) |
ALL PRIVILEGES:等同 root,包含 SHUTDOWN、FILE、GRANT OPTION 等極危操作。FILE:可讀寫服務器文件 (LOAD_FILE/SELECT ... INTO OUTFILE),易導致系統滲透。GRANT OPTION:允許將自己的權限轉授他人,權限蔓延源頭。SUPER (5.7)/SYSTEM_VARIABLES_ADMIN 等 (8.0):可修改全局變量、Kill 任意線程、控制複製。SHUTDOWN:可關閉數據庫實例。'user'@'%':允許任意主機連接 (生產環境**嚴禁**,需限制具體 IP/網段)。'user'@'192.168.1.%':允許特定網段。'user'@'localhost':僅允許本地 Unix Socket 連接 (繞過 TCP)。'user'@'127.0.0.1':僅允許本地 TCP 回環。最佳實踐:應用賬號綁定應用服務器 IP;運維賬號綁定堡壘機/跳板機 IP;監控賬號綁定監控系統 IP。
-- 撤銷特定權限
REVOKE INSERT, UPDATE ON `biz_db`.* FROM 'liuyz'@'%';
-- 撤銷所有權限 (保留用戶)
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'liuyz'@'%';
-- 刪除用戶
DROP USER 'liuyz'@'%';
-- 審計:查看用戶權限
SHOW GRANTS FOR 'liuyz'@'%';
SELECT * FROM information_schema.USER_PRIVILEGES WHERE GRANTEE LIKE '%liuyz%';
CREATE ROLE 'app_read'; GRANT SELECT ON db.* TO 'app_read'; GRANT 'app_read' TO 'user1'@'%'; 實現權限集複用。SUPER 拆分為 SYSTEM_VARIABLES_ADMIN、CONNECTION_ADMIN、REPLICATION_SLAVE_ADMIN 等 30+ 細粒度權限。validate_password 組件強制複雜度、過期、歷史記錄。GRANT/REVOKE/CREATE USER/DROP USER 自動持久化,無需手動刷新。order_ro、order_rw、order_admin)。%。mysql.user、mysql.db、mysql.tables_priv,清理僵屍賬號、回收過期權限。SELECT, RELOAD, LOCK TABLES, REPLICATION CLIENT, PROCESS (xtrabackup/mysqldump 所需)。log_bin、audit_log 記錄所有 DDL/DCL 操作。MySQL 權限管理核心三步走:**創建綁定主機用戶 → 按最小權限授予具體層級權限 → 刷新生效並持續審計**。MySQL 8.0 引入角色與動態權限大幅簡化了大規模授權維護,建議升級並重構權限體系。