萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL GRANT 授權命令完整使用手冊

語法核心

GRANT 權限列表 ON 資料庫.物件 TO '用戶'@'主機' [IDENTIFIED BY '密碼'] [WITH GRANT OPTION];

權限層級與常用權限對照

層級ON 子句典型權限適用角色
全域*.*ALL PRIVILEGES, SUPER, RELOAD, SHUTDOWNDBA、監控帳號
資料庫db_name.*SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER應用帳號、開發
資料表db_name.tbl_nameSELECT, INSERT, UPDATE, DELETE, REFERENCES細粒度控制
欄位db_name.tbl_name (col1, col2)SELECT (col1), UPDATE (col1)敏感欄位隔離
程式碼物件PROCEDURE db.proc / FUNCTION db.fnEXECUTE, ALTER ROUTINE存儲過程調用者

實戰授權範例

1. 普通應用帳號(增刪改查)

GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'10.0.0.%' IDENTIFIED BY 'strong_pass';
FLUSH PRIVILEGES;

2. 開發帳號(DDL + 程式碼物件)

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;

3. 唯讀/報表帳號

GRANT SELECT ON report_db.* TO 'ro_user'@'10.0.1.%' IDENTIFIED BY 'ro_pass';
FLUSH PRIVILEGES;

4. 跨庫/特定表/欄位授權

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;

關鍵注意事項

  1. 生效時機:權限變更後,**用戶必須重新連線**才生效。
  2. WITH GRANT OPTION:允許被授權用戶再授權他人,**生產環境極少使用**,權限收口由 DBA 統一管理。
  3. 密碼管理:MySQL 8.0 建議使用 CREATE USER ... IDENTIFIED BY ... 再 GRANT,分離建帳號與授權。
  4. 通配符主機:%` 代表任意 IP,生產環境**嚴禁**對高權限帳號使用,請限定具體 IP/網段。
  5. 系統表授權:調用存儲過程需 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 審計、變更後提醒重連。將授權操作納入變更管理流程,留存審計軌跡。

copyright © 萬盛學電腦網 all rights reserved