GRANT 權限列表 ON 資料庫.物件 TO '用戶'@'主機' [IDENTIFIED BY '密碼'] [WITH GRANT OPTION];
| 層級 | ON 子句 | 典型權限 | 適用角色 |
|---|---|---|---|
| 全域 | *.* | ALL PRIVILEGES, SUPER, RELOAD, SHUTDOWN | DBA、監控帳號 |
| 資料庫 | db_name.* | SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER | 應用帳號、開發 |
| 資料表 | db_name.tbl_name | SELECT, INSERT, UPDATE, DELETE, REFERENCES | 細粒度控制 |
| 欄位 | db_name.tbl_name (col1, col2) | SELECT (col1), UPDATE (col1) | 敏感欄位隔離 |
| 程式碼物件 | PROCEDURE db.proc / FUNCTION db.fn | EXECUTE, ALTER ROUTINE | 存儲過程調用者 |
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'10.0.0.%' IDENTIFIED BY 'strong_pass';
FLUSH PRIVILEGES;
GRANT CREATE, ALTER, DROP, INDEX, REFERENCES,
CREATE TEMPORARY TABLES, CREATE VIEW, SHOW VIEW,
CREATE ROUTINE, ALTER ROUTINE, EXECUTE
ON dev_db.* TO 'dev_user'@'10.0.0.%' IDENTIFIED BY 'dev_pass';
FLUSH PRIVILEGES;
GRANT SELECT ON report_db.* TO 'ro_user'@'10.0.1.%' IDENTIFIED BY 'ro_pass';
FLUSH PRIVILEGES;
GRANT SELECT (id, username, email) ON app_db.users TO 'api_user'@'%';
GRANT SELECT ON app_db.orders TO 'api_user'@'%';
SHOW GRANTS; -- 當前用戶
SHOW GRANTS FOR 'user'@'host'; -- 指定用戶
REVOKE ALL PRIVILEGES ON *.* FROM 'user'@'host';
FLUSH PRIVILEGES;
CREATE USER ... IDENTIFIED BY ... 再 GRANT,分離建帳號與授權。%` 代表任意 IP,生產環境**嚴禁**對高權限帳號使用,請限定具體 IP/網段。mysql.proc 表 SELECT 權限,報錯 SELECT command denied ... for table 'proc' 時請補授權。mysql.user:全域權限、認證資訊。mysql.db:資料庫級權限。mysql.tables_priv:表級權限。mysql.columns_priv:欄位級權限。mysql.procs_priv:存儲過程/函數權限。遵循最小權限原則:按角色拆分帳號、限定來源 IP、分層授權(全域/庫/表/欄/程式碼)、定期 SHOW GRANTS 審計、變更後提醒重連。將授權操作納入變更管理流程,留存審計軌跡。