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

MySQL 安全性指南(二):權限體系詳解、訪問控制邏輯與高危權限防範

     編輯:MySQL 資料庫相關知識

本文系統梳理 MySQL 權限分類(數據庫/表級、管理級)、服務端雙階段訪問控制邏輯、範圍列匹配規則、授權表組合邏輯,並重點剖析 FILE、GRANT、ALTER、SHUTDOWN 等高危權限的攻擊場景與防範措施。

一、權限分類與適用範圍

分類權限說明存儲表
數據庫/表級SELECT查詢表數據user/db/tables_priv/columns_priv
INSERT插入記錄
UPDATE修改記錄
DELETE刪除記錄
CREATE創建庫/表
DROP刪除庫/表
INDEX創建/刪除索引
管理級FILE讀寫服務端文件(極高危)user
GRANT授予自身權限給他人user
PROCESS查看/殺死所有線程user
RELOAD執行 FLUSH、刷新日志/權限user
SHUTDOWN關閉服務器user
SUPER (舊版無)高級管理操作user

user/db/host 表採用 ENUM('N','Y') 列存儲;tables_priv/columns_priv 採用 SET 類型單列組合存儲。

二、雙階段訪問控制流程

  1. 階段一:連接驗證 —— 匹配 user 表 Host、User、Password,失敗即拒絕。
  2. 階段二:查詢授權 —— 每條查詢按順序檢查:
    1. user 表全局權限 → 足夠則執行
    2. db 表資料庫級權限 + host 表(AND 邏輯) → 足夠則執行
    3. tables_priv 表級權限
    4. columns_priv 列級權限
    5. 全無則拒絕

邏輯表達式:user OR (db AND host) OR tables_priv OR columns_priv。服務啟動時將授權表載入內存,修改後必須 FLUSH PRIVILEGES 或 mysqladmin reload 生效。

三、範圍列匹配規則與優先級

  • Host:支援主機名、IP、通配符 % _、CIDR(3.23+)。localhost 僅匹配 Unix socket 連接。
  • User:空值匹配任意用戶(匿名),% 為字面值。
  • Password:空值表示無需密碼,存儲加密值,手動操作必須用 PASSWORD()。
  • Db:db/host 表支援通配符,tables_priv/columns_priv 僅字面值。
  • 大小寫敏感性:User、Password、Db、Table_name、Column_name 敏感;Host 不敏感。

排序原則:Host 具體度優先(字面值 > 通配符),同 Host 下 User 具體度優先。最具體記錄優先匹配。

四、四大高危權限實戰防範

1. FILE 權限 —— 讀寫任意服務端可訪問文件

-- 竊取 /etc/passwd
CREATE TABLE etc_passwd (pwd_entry TEXT);
LOAD DATA INFILE '/etc/passwd' INTO TABLE etc_passwd;
SELECT * FROM etc_passwd;

-- 竊取其他庫表文件(需數據目錄權限不當)
CREATE TABLE tmp (b LONGBLOB);
LOAD DATA INFILE './other_db/x.frm' INTO TABLE tmp ...;
SELECT * FROM tmp INTO OUTFILE 'y.frm' ...;

防範:嚴格限制數據目錄權限(chmod 700),啟動參數 --skip-show-database 隱藏無權庫。

2. GRANT 權限 —— 權限傳遞鏈

兩個擁有 GRANT 的用戶可互相提升權限,最終達到超級用戶級別。原則:極少授予,僅限 DBA。

3. ALTER 權限 —— 偷梁換柱

ALTER TABLE t2 RENAME t1 可繞過表級授權訪問受保護表。防範:不授予非 DBA 的 ALTER。

4. SHUTDOWN/PROCESS/RELOAD

分別導致服務拒絕、洩露敏感查詢文本(含明文密碼)、配置篡改。原則:按需最小授予,審計所有管理操作。

五、最佳實踐清單

  1. 吝嗇授予 user 表全局權限,優先使用 db、tables_priv、columns_priv 限定範圍。
  2. 絕不授予 mysql 系統庫任何權限(等同全局 GRANT)。
  3. 定期審計 FLUSH PRIVILEGES 後的實時生效狀態。
  4. 啟用 --secure-auth 拒絕預 4.1 協議客戶端。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved