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

MySQL 權限體系深度解析:三大授權表、27 項權限與遞歸檢查邏輯

     編輯:MySQL 資料庫相關知識

MySQL 權限控制核心在於 mysql 系統庫中的三張授權表:user、db、host(舊版本另有 tables_priv、columns_priv)。理解其層級檢查順序與 27 項細粒度權限,是實現最小權限部署的基礎。

授權表檢查順序

  1. 連線驗證: user 表 Host、User、Password 三欄匹配。
  2. 權限分配(由廣至窄):
    • Global:user 表權限欄位為 Y → 擁有所有庫所有權限,停止檢查。
    • Database:db 表匹配具體庫,取得 Y 權限。
    • Table:tables_priv 表匹配具體表。
    • Column:columns_priv 表匹配具體欄位。

27 項權限完整清單與實測語法

#權限關鍵字用途授權範例
1USAGE僅連線權限(預設授予,不可回收)GRANT USAGE ON *.* TO 'p1'@'localhost' IDENTIFIED BY '123';
2SELECT查詢資料GRANT SELECT ON pyt.* TO 'p1'@'localhost';
3CREATE建立表/索引GRANT CREATE ON pyt.* TO 'p1'@'localhost';
4CREATE ROUTINE建立預存程序/函數(自動附贈 EXECUTE、ALTER ROUTINE)GRANT CREATE ROUTINE ON pyt.* TO 'p1'@'localhost';
5CREATE TEMPORARY TABLES建立臨時表GRANT CREATE TEMPORARY TABLES ON pyt.* TO 'p1'@'localhost';
6CREATE VIEW建立檢視表GRANT CREATE VIEW ON pyt.* TO 'p1'@'localhost';
7CREATE USER建立用戶(需 mysql 全庫 CREATE USER 或 INSERT 權限)GRANT CREATE USER ON *.* TO 'p1'@'localhost';
8INSERT插入資料GRANT INSERT ON pyt.* TO 'p1'@'localhost';
9ALTER修改表結構GRANT ALTER ON pyt.* TO 'p1'@'localhost';
10ALTER ROUTINE修改/刪除預存程序/函數GRANT ALTER ROUTINE ON pyt.* TO 'p1'@'localhost';
11UPDATE更新資料GRANT UPDATE ON pyt.* TO 'p1'@'localhost';
12DELETE刪除資料GRANT DELETE ON pyt.* TO 'p1'@'localhost';
13DROP刪除庫/表/檢視/索引GRANT DROP ON pyt.* TO 'p1'@'localhost';
14SHOW DATABASES顯示所有資料庫(否則僅見有權限的庫)GRANT SHOW DATABASES ON *.* TO 'p1'@'localhost';
15SHOW VIEW執行 SHOW CREATE VIEWGRANT SHOW VIEW ON pyt.* TO 'p1'@'localhost';
16EXECUTE執行預存程序/函數(通常由 CREATE ROUTINE 自動授予)
17FILELOAD DATA INFILE / SELECT INTO OUTFILEGRANT FILE ON *.* TO 'p1'@'localhost';
18INDEX建立/刪除索引GRANT INDEX ON pyt.* TO 'p1'@'localhost';
19LOCK TABLES鎖定表GRANT LOCK TABLES ON pyt.* TO 'p1'@'localhost';
20PROCESS查看所有執行緒GRANT PROCESS ON *.* TO 'p1'@'localhost';
21RELOADFLUSH 操作GRANT RELOAD ON *.* TO 'p1'@'localhost';
22REPLICATION CLIENT查看主從狀態GRANT REPLICATION CLIENT ON *.* TO 'p1'@'localhost';
23REPLICATION SLAVE從庫複制權限GRANT REPLICATION SLAVE ON *.* TO 'p1'@'localhost';
24SHUTDOWN關閉伺服器GRANT SHUTDOWN ON *.* TO 'p1'@'localhost';
25SUPERKILL 執行緒、修改全域變數等GRANT SUPER ON *.* TO 'p1'@'localhost';
26REFERENCES外鍵引用(預留)GRANT REFERENCES ON pyt.* TO 'p1'@'localhost';
27ALL PRIVILEGES除 GRANT OPTION 外所有權限GRANT ALL PRIVILEGES ON pyt.* TO 'p1'@'localhost';

關鍵觀察

  • USAGE 僅代表「能連線」,不含任何操作權限,且 REVOKE 無法移除用戶,需 DROP USER。
  • CREATE ROUTINE 授予時自動附贈 EXECUTE、ALTER ROUTINE 給建立者。
  • SHOW DATABASES 全域權限決定是否可見 mysql 等系統庫。
  • 權限修改後,現有連線生效規則:
    — 表/欄權限:下一請求生效
    — 資料庫權限:下一 USE db 生效
    — 全域/密碼變更:下一次重連生效
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved