語法核心
GRANT privileges ON db_object TO 'user'@'host' [IDENTIFIED BY 'pass'] [WITH GRANT OPTION];
五大授權層級
| 層級 | 範例 | 適用對象 |
| 全域 (Global) | GRANT SELECT ON *.* TO 'dba'@'localhost'; | 跨庫管理、監控帳號 |
| 資料庫 (Database) | GRANT SELECT ON testdb.* TO 'dev'@'%'; | 開發、唯讀報表 |
| 資料表 (Table) | GRANT SELECT,INSERT ON testdb.orders TO 'app'@'10.0.0.%'; | 應用服務帳號 |
| 欄位 (Column) | GRANT SELECT(id,email) ON testdb.users TO 'api'@'%'; | 最小權限原則、敏感欄位隔離 |
| 程序/函數 (Routine) | GRANT EXECUTE ON PROCEDURE testdb.proc TO 'dev'@'%'; | 存儲過程調用者 |
權限分類速查
- 數據操作 (DML):SELECT, INSERT, UPDATE, DELETE
- 結構管理 (DDL):CREATE, ALTER, DROP, INDEX
- 權限管理:GRANT OPTION, CREATE USER
- 管理操作:RELOAD, SHUTDOWN, PROCESS, SUPER, REPLICATION SLAVE/CLIENT
- 特殊:USAGE (無實際權限,佔位)、ALL PRIVILEGES (除 GRANT OPTION 外所有)
典型角色授權範本
1. 唯讀報表用戶
GRANT SELECT ON *.* TO 'readonly'@'%' IDENTIFIED BY 'pass';
2. 開發人員 (建表、索引、視圖、存儲過程)
GRANT CREATE, ALTER, DROP, INDEX, CREATE VIEW, SHOW VIEW,
CREATE ROUTINE, ALTER ROUTINE, EXECUTE
ON devdb.* TO 'dev'@'192.168.0.%' IDENTIFIED BY 'pass';
3. 單庫 DBA
GRANT ALL PRIVILEGES ON appdb.* TO 'dba'@'localhost';
4. 超級 DBA
GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
查看與撤銷權限
SHOW GRANTS; -- 當前用戶
SHOW GRANTS FOR 'user'@'host'; -- 指定用戶
REVOKE ALL ON *.* FROM 'user'@'host'; -- 撤銷
注意事項
- 授權/撤銷後,用戶需**重新連線**生效
WITH GRANT OPTION 允許被授權者再授權,生產環境極少用,統一由 DBA 管理
- 避免直接操作
mysql.user/db/tables_priv/columns_priv/procs_priv 表,易遺漏 FLUSH PRIVILEGES