GRANT 與 REVOKE 是 MySQL 權限控制的核心,採用「最小權限原則」按層級精準分配,避免過度授權風險。
GRANT 權限列表 ON 對象 TO '用戶'@'主機' [IDENTIFIED BY '密碼'] [WITH GRANT OPTION];
REVOKE 權限列表 ON 對象 FROM '用戶'@'主機';
GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO 'app_user'@'%';
GRANT CREATE, ALTER, DROP, INDEX, CREATE VIEW, SHOW VIEW,
CREATE ROUTINE, ALTER ROUTINE, EXECUTE,
CREATE TEMPORARY TABLES, REFERENCES
ON testdb.* TO 'dev_user'@'192.168.0.%';
GRANT ALL PRIVILEGES ON testdb.* TO 'dba'@'localhost';
GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
# 列級
GRANT SELECT (id, name, email) ON testdb.users TO 'report'@'%';
# 存儲過程/函數
GRANT EXECUTE ON PROCEDURE testdb.proc_name TO 'api'@'%';
GRANT EXECUTE ON FUNCTION testdb.func_name TO 'api'@'%';
FLUSH PRIVILEGES,但舊版本或手動修改 mysql.user 表需執行SHOW GRANTS;SHOW GRANTS FOR 'user'@'host';| 表名 | 作用範圍 | 說明 |
|---|---|---|
| user | 全局(超級用戶) | 連接驗證、全局權限 |
| db | 數據庫級 | 特定庫的所有表權限 |
| host | 主機+數據庫 | 配合 db 表做主機級訪問控制,不受 GRANT/REVOKE 影響 |
| tables_priv | 表級 | 單表所有列的權限 |
| columns_priv | 列級 | 單表特定列的權限 |
TO 改為 FROM,如 REVOKE ALL ON *.* FROM 'user'@'host';% 匹配所有 IP,localhost 僅本地 socket,192.168.0.% 支持網段建立標準化授權流程,配合定期 SHOW GRANTS 審計,構建安全合規的數據庫權限體系。