首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

MySQL 權限體系完整解析:三大權限表、27 項權限細節與最佳實踐

     編輯:關於SqlServer

前言

MySQL 權限系統基於權限表驗證與授權。本文系統梳理 `user`/`db`/`tables_priv`/`columns_priv`/`procs_priv`/`proxies_priv` 六大權限表存取邏輯,詳細列舉 27 項權限的授予語法、生效範圍、典型操作與安全建議,並說明全域權限與物件級權限的層級遞補機制。

一、 權限表架構與存取邏輯

  1. user 表 (全域): `Host`、`User`、`Password`、`Select_priv`...`Create_user_priv` 等全域權限欄位。第一道關卡:連線驗證 (Host+User+Password)。
  2. db 表 (庫級): `Host`、`Db`、`User` + 權限欄位。第二道關卡:庫級授權。
  3. tables_priv (表級)、columns_priv (欄位級)、procs_priv (程序級)、proxies_priv (代理級): 細粒度物件權限。

層級遞補規則: `user` (全域 Y → 直接通過,不再檢查下層) → `db` (庫級 Y) → `tables_priv` (表級 Y) → `columns_priv` (欄位級 Y)。任何層級為 Y 即授權成功,N 則繼續向下檢查。

二、 27 項權限詳細速查表

#權限允許操作授予語法範例備註
1USAGE僅連線登入 (無操作權)GRANT USAGE ON *.* TO 'u'@'h' IDENTIFIED BY 'p';建立用戶自動授予,**不可 REVOKE** (不刪除用戶)
2SELECT查詢GRANT SELECT ON db.* TO 'u'@'h';
3CREATE建表/索引GRANT CREATE ON db.* TO 'u'@'h';
4CREATE ROUTINE建立/修改/刪除 PROCEDURE/FUNCTIONGRANT CREATE ROUTINE ON db.* TO 'u'@'h';**自動附贈** EXECUTE, ALTER ROUTINE 給建立者
5CREATE TEMPORARY TABLES建立臨時表GRANT CREATE TEMPORARY TABLES ON db.* TO 'u'@'h';注意複數 TABLES
6CREATE VIEW建立視圖GRANT CREATE VIEW ON db.* TO 'u'@'h';
7CREATE USER建立/刪除/重命名用戶GRANT CREATE USER ON *.* TO 'u'@'h';**僅全域** 或需 INSERT 權限於 mysql.user
8INSERT插入資料GRANT INSERT ON db.* TO 'u'@'h';
9ALTER修改表結構GRANT ALTER ON db.* TO 'u'@'h';
10ALTER ROUTINE修改/刪除程序/函數GRANT ALTER ROUTINE ON db.* TO 'u'@'h';撤銷後無法 DROP PROCEDURE
11UPDATE更新資料GRANT UPDATE ON db.* TO 'u'@'h';
12DELETE刪除資料GRANT DELETE ON db.* TO 'u'@'h';
13DROP刪除庫/表/視圖/索引GRANT DROP ON db.* TO 'u'@'h';
14SHOW DATABASES查看所有庫 (含無權限者)GRANT SHOW DATABASES ON *.* TO 'u'@'h';**僅全域**
15SHOW VIEWSHOW CREATE VIEWGRANT SHOW VIEW ON db.* TO 'u'@'h';
16INDEX建立/刪除索引GRANT INDEX ON db.* TO 'u'@'h';
17EXECUTE呼叫程序/函數GRANT EXECUTE ON PROCEDURE db.p TO 'u'@'h';可指定具體程序
18LOCK TABLES鎖表 (需 SELECT 權限)GRANT LOCK TABLES ON db.* TO 'u'@'h';
19REFERENCES建立外鍵引用GRANT REFERENCES ON db.* TO 'u'@'h';
20RELOADFLUSH TABLES/LOGS/PRIVILEGESGRANT RELOAD ON *.* TO 'u'@'h';**僅全域**
21REPLICATION CLIENTSHOW MASTER/SLAVE STATUSGRANT REPLICATION CLIENT ON *.* TO 'u'@'h';**僅全域**
22REPLICATION SLAVE從庫讀取 BinlogGRANT REPLICATION SLAVE ON *.* TO 'u'@'h';**僅全域**
23SHUTDOWNmysqladmin shutdownGRANT SHUTDOWN ON *.* TO 'u'@'h';**僅全域**
24GRANT OPTION將自己擁有的權限授予他人GRANT GRANT OPTION ON db.* TO 'u'@'h';僅限已擁有權限
25FILESELECT ... INTO OUTFILE / LOAD DATA INFILEGRANT FILE ON *.* TO 'u'@'h';**僅全域**,**極高風險** (讀寫伺服器檔案),嚴禁授予非管理員
26SUPERKILL 線程、SET GLOBAL、CHANGE MASTER、PURGE BINLOGGRANT SUPER ON *.* TO 'u'@'h';**僅全域**,高風險
27PROCESSSHOW PROCESSLIST (全例程)、KILLGRANT PROCESS ON *.* TO 'u'@'h';**僅全域**,預設用戶僅見自身進程

三、 關鍵安全最佳實踐

  • 管理權限 (FILE, PROCESS, SUPER, SHUTDOWN, RELOAD, REPLICATION*, CREATE USER) 僅授予 *. * 全域,嚴禁指定庫。
  • 最小權限原則: 應用帳號僅授予特定庫的 SELECT/INSERT/UPDATE/DELETE/EXECUTE。
  • 定期審計: `SHOW GRANTS FOR 'u'@'h';` 檢查實際權限。
  • 避免通配符主機 `%`: 限制具體 IP/網段。
  • 密碼策略: 強制複雜度、定期輪換、使用 `validate_password` 元件。

四、 權限生效與快取

修改權限表後,執行 `FLUSH PRIVILEGES;` 或 `mysqladmin flush-privileges` 重載快取生效 (MySQL 8.0+ 部分操作自動生效)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved