首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL GRANT 權限授予完整指南(MySQL 5.x 適用)

     編輯:MySQL 資料庫相關知識

MySQL 的權限管理系統相當靈活,透過 GRANT 指令可以精細控制使用者對資料庫物件的存取權限。本文以 MySQL 5.0 及以上版本為基礎,系統整理常見授權場景與語法細節,供 DBA 與開發人員快速參考。

一、基本授權語法

核心語法結構如下:

GRANT 權限 ON 資料庫物件 TO 使用者帳號

其中「資料庫物件」可為整個伺服器(*.*)、單一資料庫(db_name.*)、單一資料表(db_name.tbl_name)、欄位層級,甚至特定預存程序/函數。

二、一般資料使用者:CRUD 基本權限

針對唯讀或需增刪改查的應用帳號,通常只授予 DML 權限:

GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO 'common_user'@'%';

也可分開授予,效果相同。

三、資料庫開發人員:DDL 與進階物件權限

開發人員除基本 CRUD 外,常需建立/修改表結構、索引、視圖、預存程序等:

  • 表結構操作: GRANT CREATE, ALTER, DROP ON testdb.* TO 'developer'@'192.168.0.%';
  • 外鍵與臨時表: GRANT REFERENCES, 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.%';

四、DBA 角色權限劃分

1. 單庫 DBA

GRANT ALL PRIVILEGES ON testdb TO 'dba'@'localhost';

PRIVILEGES 關鍵字可省略。

2. 超級 DBA(全域管理)

GRANT ALL ON *.* TO 'dba'@'localhost';

五、權限作用層次說明

  1. 全域層級(*.*):影響整個 MySQL 伺服器所有資料庫。
  2. 資料庫層級(db.*):僅限指定資料庫內所有物件。
  3. 資料表層級(db.tbl):精確到單一表。
  4. 欄位層級:GRANT SELECT (id, name) ON testdb.tbl TO 'user'@'host';
  5. 程序/函數層級:GRANT EXECUTE ON PROCEDURE testdb.proc TO 'user'@'host';

六、查看使用者權限

SHOW GRANTS;                 -- 當前使用者
SHOW GRANTS FOR 'dba'@'localhost';  -- 指定使用者

七、撤銷權限(REVOKE)

語法與 GRANT 幾乎相同,僅將 TO 改為 FROM:

REVOKE ALL ON *.* FROM 'dba'@'localhost';

八、關鍵注意事項

  1. 權限生效需重新連線:授權/撤銷後,該使用者必須重新連接 MySQL 才會生效。
  2. 授權傳遞(WITH GRANT OPTION):允許受授權者再將相同權限授予他人,生產環境建議由 DBA 統一管理,避免濫用。
GRANT SELECT ON testdb.* TO 'dba'@'localhost' WITH GRANT OPTION;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved