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

深度解析 MySQL 權限系統:授權表結構、認證流程與安全配置實戰

     編輯:MySQL 綜合教學

核心架構:五張授權表

MySQL 採用非標準但靈活的權限體系,核心為 mysql 庫下五張表(安裝時由 mysql_install_db 初始化):

  • user:全局權限、用戶認證
  • db:庫級權限
  • host:配合 db 實現主機級精細控制
  • tables_priv:表級權限
  • columns_priv:列級權限

注意:無 rows_priv,行級需應用層實現或用 GET_LOCK()。

權限分類詳解

數據/表操作權限

SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER、INDEX、REFERENCES(保留)

管理權限

FILE(高危,慎授)、GRANT、PROCESS、RELOAD、SHUTDOWN

管理權限僅存在 user 表,因屬服務器級操作。

作用域列匹配規則

列類型通配符特殊規則
HostCHAR(60)%、_、IP/掩碼 (192.168.0.0/17)空值=%;拒絕數字開頭主機名匹配 IP 通配符
UserCHAR(16)無(% 視為字面值)空值=匿名用戶
PasswordCHAR(16)不允許存儲加密值;空值=無需密碼
DbCHAR(64/60)db/host 表支援 %、_tables_priv/columns_priv 僅字面值

權限生效邏輯:兩階段認證

階段一:連接驗證

  1. 讀取 user 表並按「具體優先」排序:Host 字面值 > 通配符;同 Host 下 User 字面值 > 空值
  2. 順序掃描,首個匹配 Host+User+Password 的記錄生效
  3. 常見誤區:以為顯式用戶名優先,實則空 User 可能搶先匹配

階段二:請求驗證

  • 管理請求:僅查 user 表
  • 數據請求:先查 user 全局權限 → 不足則查 db+host → 再查 tables_priv/columns_priv
  • 權限疊加:全局權限為超級用戶保留,普通用戶應設為 N,靠庫/表級授權

排序算法與實戰診斷

服務器啟動時讀取並排序授權表。mysqlaccess 腳本可輔助診斷(僅檢查 user/db/host)。

安全配置建議

  • 嚴格控制 FILE、GRANT、SHUTDOWN 等高危權限
  • 避免以 root 運行 mysqld,限制 FILE 寫入範圍
  • 善用 GRANT/REVOKE 而非直接改表,確保緩存同步
  • 定期審計 user 表匿名帳號、空密碼帳號
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved