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

MySQL 安全性指南 (二):外部安全 — 授權表架構與存取控制流程

     編輯:MySQL 資料庫相關知識

權限體系總覽

資料庫/表層級權限

權限允許操作
ALTERALTER TABLE (需配合其他權限)
CREATECREATE DATABASE/TABLE (不含 INDEX)
DELETEDELETE 記錄
DROPDROP DATABASE/TABLE (不含 INDEX)
INDEXCREATE/DROP INDEX
REFERENCES保留 (未來外鍵用)
SELECTSELECT 查詢 (不涉及表的 SELECT 如 NOW() 不需此權限)
UPDATEUPDATE 修改記錄

管理權限 (全域)

權限允許操作風險提示
FILESELECT ... INTO OUTFILE / LOAD DATA INFILE高危,可讀寫伺服器檔案,嚴格限制授予
GRANTGRANT/REVOKE 授權他人含遞授權限,謹慎給予
PROCESSSHOW PROCESSLIST / KILL 執行緒可見/殺死所有連線
RELOADFLUSH */ mysqladmin reload/refresh/flush-*服務管理操作
SHUTDOWNmysqladmin shutdown關閉服務器

授權表結構

  • user:全域權限 (含 FILE/PROCESS/RELOAD/SHUTDOWN 專屬欄位)
  • db:資料庫層級權限
  • host:主機層級權限 (配合 db 使用)
  • tables_priv:表層級權限 (SET 型別:Select,Insert,Update,Delete,Create,Drop,Grant,References,Index,Alter)
  • columns_priv:欄位層級權限 (SET:Select,Insert,Update,References)

所有權限欄位型別 ENUM('N','Y'),預設 N。

兩階段存取控制流程

階段一:連線驗證

  1. 客戶端發起連線,提供 user、host、password
  2. Server 查 user 表尋找匹配列 (User、Host、Password)
  3. 無匹配 → 拒絕連線;有匹配 → 建立連線,進入階段二

階段二:請求授權檢查

  1. 每個查詢/操作,Server 檢查授權表
  2. 權限合併邏輯:user (全域) + db/host (資料庫) + tables_priv (表) + columns_priv (欄位)
  3. 缺乏必要權限 → 拒絕執行
  4. 持續至連線結束

範圍欄位匹配規則

Host 欄位

  • 主機名、IP 位址、localhost (僅匹配 hostname 為 localhost 的連線)
  • 通配符:% (任意)、_ (單字元) — 同 LIKE 語法
  • 範例:%.edu、192.168.%、192.168.3.%
  • % 匹配所有主機

User 欄位

  • 空白 = 匿名使用者 (任何用戶名皆匹配)
  • 具體用戶名精確匹配

Db 欄位

  • 資料庫名、% (所有資料庫)
  • _ 單字元通配

權限合併優先序

Server 依序檢查:user → db → host → tables_priv → columns_priv,後者可擴展前者權限,但不受前者限制 (即表級權限可超出資料庫級)。

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