GRANT 是 MySQL 權限系統的核心命令,用於授予用戶對資料庫對象的特定操作權限。本文基於 MySQL 5.x 版本,通過分層級、分場景的實例,系統講解授權語法、權限層級、查看與回收機制及常見陷阱。
GRANT privilege_type [, privilege_type] ...
ON object_type privilege_level
TO user_specification [, user_specification] ...
[REQUIRE {NONE | ssl_option ...}]
[WITH with_option ...]
privilege_type:SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、INDEX、ALTER、REFERENCES、EXECUTE、CREATE VIEW、SHOW VIEW、CREATE ROUTINE、ALTER ROUTINE、ALL PRIVILEGES 等。privilege_level:*.*(全庫全表)、db.*(庫級)、db.tbl(表級)、db.tbl(col)(列級)、PROCEDURE db.proc、FUNCTION db.func。user_specification:'user'@'host',支援通配符 %。GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'%' IDENTIFIED BY 'strong_pass';
GRANT CREATE, ALTER, DROP, INDEX, REFERENCES,
CREATE TEMPORARY TABLES,
CREATE VIEW, SHOW VIEW,
CREATE ROUTINE, ALTER ROUTINE, EXECUTE
ON dev_db.* TO 'dev_user'@'192.168.1.%' IDENTIFIED BY 'dev_pass';
GRANT ALL PRIVILEGES ON prod_db.* TO 'dba_user'@'localhost' IDENTIFIED BY 'dba_pass';
GRANT ALL ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root_pass' WITH GRANT OPTION;
注意:WITH GRANT OPTION 允許被授權者再授權給他人,生產環境極少開啟,權限收口由專職 DBA 統一管理。
| 層級 | 語法範例 | 適用場景 |
|---|---|---|
| 全例項 | GRANT SELECT ON *.* TO 'monitor'@'%'; | 監控、備份、審計賬號 |
| 單庫 | GRANT SELECT ON reporting.* TO 'analyst'@'%'; | 跨表查詢分析 |
| 單表 | GRANT SELECT, INSERT ON orders.order_2024 TO 'etl_user'@'%'; | ETL 寫入特定分表 |
| 列級 | GRANT SELECT(id, name, email) ON users.profile TO 'api_user'@'%'; | 敏感字段隔離(如密碼哈希不授權) |
| 程序/函數 | GRANT EXECUTE ON PROCEDURE pay.calc_bonus TO 'svc_user'@'%'; | 業務邏輯封裝在存儲過程 |
SHOW GRANTS;
SHOW GRANTS FOR 'app_user'@'%';
REVOKE ALL ON *.* FROM 'old_user'@'%';
語法與 GRANT 幾乎相同,僅將 TO 改為 FROM。
WITH GRANT OPTION 慎用:權限傳遞鏈難以追蹤,違反最小權限原則。INSERT/UPDATE/DELETE mysql.user, mysql.db, mysql.tables_priv...,務必用 GRANT/REVOKE 讓服務器自動維護權限快取。DELETE FROM mysql.user WHERE User='' OR Password=''; FLUSH PRIVILEGES;。skip-name-resolve 開啟時,權限表 Host 列只能用 IP,否則需確保 DNS/hosts 正確。root@'%',管理賬號限制 localhost 或跳板機 IP。SHOW GRANTS,清理離職人員、廢棄專案賬號。MAX_QUERIES_PER_HOUR、MAX_CONNECTIONS_PER_HOUR 等資源限制防濫用。MySQL 權限系統雖不如 PostgreSQL 的角色體系靈活,但掌握 GRANT 的層級語法與生效機制,配合自動化腳本管理賬號全生命週期,完全能滿足企業級合規與安全需求。