基本語法
GRANT 權限 ON 資料庫物件 TO 用戶
REVOKE 權限 ON 資料庫物件 FROM 用戶
常見授權場景
1. 一般資料用戶(CRUD 權限)
-- 單獨授權
GRANT SELECT ON testdb.* TO common_user@'%';
GRANT INSERT ON testdb.* TO common_user@'%';
GRANT UPDATE ON testdb.* TO common_user@'%';
GRANT DELETE ON testdb.* TO common_user@'%';
-- 合併寫法(推薦)
GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO common_user@'%';
2. 開發人員(DDL + 進階權限)
-- 表結構管理
GRANT CREATE, ALTER, DROP ON testdb.* TO developer@'192.168.0.%';
-- 外鍵、臨時表、索引
GRANT REFERENCES ON testdb.* TO developer@'192.168.0.%';
GRANT CREATE TEMPORARY TABLES ON testdb.* TO developer@'192.168.0.%';
GRANT INDEX ON testdb.* TO developer@'192.168.0.%';
-- 視圖
GRANT CREATE VIEW, SHOW VIEW ON testdb.* TO developer@'192.168.0.%';
-- 預存程序/函數
GRANT CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON testdb.* TO developer@'192.168.0.%';
3. DBA 管理單一資料庫
GRANT ALL PRIVILEGES ON testdb TO dba@'localhost';
4. 超級 DBA 管理所有資料庫
GRANT ALL ON *.* TO dba@'localhost';
權限作用層級
| 層級 | 範例 | 說明 |
| 全域 | GRANT SELECT ON *.* TO dba@localhost; | 所有資料庫所有表 |
| 資料庫 | GRANT SELECT ON testdb.* TO dba@localhost; | 指定資料庫所有表 |
| 資料表 | GRANT SELECT, INSERT ON testdb.orders TO dba@localhost; | 指定單表 |
| 欄位 | GRANT SELECT(id, name) ON testdb.users TO dba@localhost; | 指定欄位 |
| 程序/函數 | GRANT EXECUTE ON PROCEDURE testdb.proc TO 'dba'@'localhost'; | 指定程序物件 |
查看權限
-- 看自己權限
SHOW GRANTS;
-- 看指定用戶權限
SHOW GRANTS FOR dba@localhost;
撤銷權限
REVOKE ALL ON *.* FROM dba@localhost;
重要注意事項
- 權限生效需重新連線:執行 GRANT/REVOKE 後,用戶必須重新連線 MySQL 權限才生效
- 授權傳遞選項:
WITH GRANT OPTION 允許被授權者再授權他人,生產環境建議由 DBA 統一管理,不開啟此選項
- 授權表結構:user、db、host、tables_priv、columns_priv 五張表分別控制不同層級權限