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

MySQL 權限表完整架構解析:user、db、table_priv、columns_priv、host 五大表詳解

     編輯:MySQL 資料庫相關知識

五大權限表概覽

表名層級用途
user全域記錄允許連線的帳號資訊,權限為全域級
db資料庫級記錄各帳號在各資料庫的操作權限
table_priv資料表級記錄資料表層級操作權限
columns_priv欄位級記錄資料欄位層級操作權限
host主機級配合 db 表對特定主機資料庫權限細粒度控制,不受 GRANT/REVOKE 影響

注意:MySQL 原生不支援資料列級權限,需自行以 GET_LOCK() 等程式邏輯實現。

版本差異與修正

  • 不同版本權限表結構不同,升級後執行 mysql_fix_privilege_tables root_password 修正
  • 建議直接升級至 MySQL 4.0.4+,早期版本 db 表缺少 Create_tmp_table_priv、Lock_tables_priv

常用權限項說明

權限功能風險提示
CREATE TEMPORARY TABLES建立暫存表低
EXECUTE執行預存程序(當前版本未實現)低
FILE讀寫伺服器主機檔案高:可讀取 /etc/passwd 等敏感檔,嚴禁授予普通用戶
GRANT OPTION將自身權限轉授他人高:避免濫用
LOCK TABLES鎖定資料表中
PROCESS檢視/終止客戶執行緒4.0.2+ 僅保留檢視,終止需 SUPER
RELOAD執行 FLUSH/RESET 等管理操作高:管理工具,勿濫授
REPLICATION CLIENT查詢主從位置低
REPLICATION SLAVE從庫請求主庫 binlog僅授予從庫連線帳號
SHOW DATABASES控制 SHOW DATABASES 權限中
SUPER終止執行緒、DEBUG、CHANGE MASTER、修改全域變數高:核心管理權限

SSL 連線類型 (user.ssl_type)

  • NONE:預設,無加密
  • ANY:需加密,任意類型(GRANT REQUIRE SSL)
  • X509:需加密且需有效 X509 憑證(GRANT REQUIRE X509)
  • SPECIFIED:需滿足 ISSUER/SUBJECT/CIPHER 指定條件

資源限制欄位 (user 表)

  • max_connections:每小時最大連線數
  • max_questions:每小時最大查詢數
  • max_updates:每小時最大修改查詢數
  • 全為 0 表示無限制

安全配置黃金法則

  1. 刪除所有匿名用戶
  2. 檢查空密碼帳號:SELECT host,user FROM user WHERE Password = ''
  3. 避免 Host 使用萬用字元 %
  4. 避免直接用 user 表授權(全域權限風險大)
  5. 絕不授予 mysql 資料庫權限(含權限表本身)
  6. FILE 權限極謹慎,資料目錄權限嚴格設定(僅 MySQL 進程可讀)
  7. PROCESS、RELOAD、ALTER 僅授予可信任帳號

GRANT 執行流程

  1. 在 user 表建立記錄:User、Host、Password、全域權限欄位
  2. 資料庫級權限 → 寫入 db 表:User、Host、Db、權限欄位
  3. 資料表/欄位級權限 → 寫入 table_priv/columns_priv
  4. REVOKE 即刪除對應記錄
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved