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

MySQL 安全性指南(二):權限體系、訪問控制與風險防範

     編輯:Oracle 資料庫相關知識

權限分類詳解

資料庫與表級權限

權限作用範圍說明
ALTER表允許 ALTER TABLE,需配合其他權限使用
CREATE庫/表創建資料庫/表,不含索引創建
DELETE表刪除記錄
DROP庫/表刪除資料庫/表,不含索引
INDEX表創建/刪除索引
SELECT表查詢數據,不涉及表的 SELECT 不受限
UPDATE表修改記錄

管理權限(全局)

權限風險等級核心能力
FILE極高讀寫伺服器主機文件,可導致 /etc/passwd 洩露或數據目錄被竊
GRANT高將自身權限授予他人,含遞授權
PROCESS中查看/殺死所有線程(SHOW PROCESSLIST、KILL)
RELOAD中執行 FLUSH、mysqladmin reload/flush-*
SHUTDOWN高關閉服務器

訪問控制雙階段機制

  1. 連接驗證:匹配 user 表中的 Host、User、Password,失敗即拒絕連接
  2. 請求授權:每條查詢依次檢查 user → db → tables_priv → columns_priv,權限以 OR 邏輯疊加

實際授權邏輯:user OR (db AND host) OR tables_priv OR columns_priv。host 表不受 GRANT/REVOKE 影響,配合 db 實現主機級精細控制。

授權表範圍列匹配規則

  • Host:支援主機名、IP、通配符 %、_、CIDR 表示法(如 192.168.128.0/17)
  • User:空值匹配任意用戶(匿名),% 為字面值而非通配符
  • Password:加密存儲,空密碼表示無需密碼,不支援通配符
  • Db/Table/Column:字面值或 SQL 通配符,區分大小寫規則見官方文檔

匹配順序:具體值優先於通配符,如 client.your.net 優先於 %.your.net 優先於 %。

高危權限與防範措施

FILE 權限攻擊示例

CREATE TABLE etc_passwd (pwd_entry TEXT);
LOAD DATA INFILE "/etc/passwd" INTO TABLE etc_passwd;
SELECT * FROM etc_passwd;

防範:嚴禁授予 FILE,數據目錄權限設為 700,啟動參數加 --skip-show-database。

ALTER 權限劫持

惡意用戶可 ALTER TABLE t2 RENAME TO t1 竊取數據。防範:最小權限原則,避免直接授予 ALTER。

GRANT 權限傳遞鏈

兩個擁有 GRANT 的用戶可互相提權。防範:user 表僅保留超級管理員,業務權限下放至 db、tables_priv、columns_priv。

授權表修改後的生效機制

服務啟動時將授權表載入記憶體,直接修改表(INSERT/UPDATE)不生效。必須執行:

FLUSH PRIVILEGES;
-- 或
mysqladmin flush-privileges / reload

總結

MySQL 安全核心在於:文件系統鎖定數據目錄、授權表最小權限分配、禁用高危全局權限、理解雙階段驗證邏輯、及時刷新權限快取。定期審計 mysql.user 表,清理匿名帳號與過期權限。

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