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

MySQL 存取權限體系完整解析:用戶認證、權限層級與安全強化

     編輯:MySQL 資料庫相關知識

MySQL 權限系統採用分層架構,支援全域、資料庫、資料表、欄位四級授權。本文深入剖析用戶認證機制、權限表結構、GRANT/REVOKE 操作與安全配置最佳實踐。

一、用戶名與密碼機制

  • MySQL 用戶名獨立於作業系統帳號,最大 16 字元(Unix 通常 8 字元)。
  • 密碼以 PASSWORD() 非可逆加密儲存,與 Unix crypt() 演算法不同。
  • 連線預設值:Host=localhost、User=當前 Unix 用戶、無密碼;可透過 .my.cnf [client] 區段固化參數。

二、權限分類與儲存位置

權限權限欄位作用層級儲存表
SELECTSelect_priv表user / db / tables_priv / columns_priv
INSERT / UPDATE / DELETEInsert_priv / Update_priv / Delete_priv表同上
INDEX / ALTER / CREATE / DROPIndex_priv / Alter_priv / Create_priv / Drop_priv資料庫/表/索引同上
GRANTGrant_priv資料庫/表user / db / host
RELOAD / SHUTDOWN / PROCESSReload_priv / Shutdown_priv / Process_priv服務器管理user
FILEFile_priv伺服器檔案存取user

核心原則:user 表權限等同超級用戶,僅授予 DBA;一般用戶應在 user 表設為 'N',透過 db/host 表按資料庫授權。

三、兩階段存取控制

  1. 連線驗證(階段 1):依 user 表 Host、User、Password 三欄匹配。Host 支援萬用字元 %、_;服務器按排序順序取第一筆匹配(非優先匹配具體用戶名)。
  2. 請求授權(階段 2):連線建立後,每個查詢依權限表檢查。權限生效邏輯:全域 → 資料庫 → 表 → 欄位,任一層級滿足即通過。

四、GRANT / REVOKE 語法與權限生效

GRANT priv_type [(col_list)] ON {tbl|*|*.*|db.*} TO user [IDENTIFIED BY 'pwd'] [WITH GRANT OPTION];
REVOKE priv_type [(col_list)] ON {tbl|*|*.*|db.*} FROM user;
  • MySQL 3.22.11+ 才支援 GRANT;舊版無效。
  • GRANT OPTION 允許受授者再授予自己擁有的權限。
  • FILE 權限極敏感,受授者可讀寫伺服器進程可存取的任意檔案。

權限變更生效時機:

  • GRANT/REVOKE/SET PASSWORD → 即時生效
  • 手工修改授權表(INSERT/UPDATE) → 需 FLUSH PRIVILEGES 或 mysqladmin flush-privileges 重載

五、初始權限與 Root 強化

安裝腳本 mysql_install_db 建立:

  • root@localhost:全權限、空密碼(極危險)
  • 匿名用戶 @localhost:僅能操作 test/test_% 資料庫
  • 其餘拒絕

立即執行:

mysql -u root mysql
UPDATE user SET Password=PASSWORD('strong_pwd') WHERE User='root';
FLUSH PRIVILEGES;
-- 或
mysqladmin -u root password 'strong_pwd'

六、新增用戶範例

-- 超級用戶
GRANT ALL ON *.* TO monty@localhost IDENTIFIED BY 'pwd' WITH GRANT OPTION;
GRANT ALL ON *.* TO monty@'%' IDENTIFIED BY 'pwd' WITH GRANT OPTION;

-- 管理用戶(僅 reload/process)
GRANT RELOAD, PROCESS ON *.* TO admin@localhost;

-- 佔位用戶(無實際權限,後續再授)
GRANT USAGE ON *.* TO dummy@localhost;

註:需同時建立 @localhost 與 @'%' 兩條記錄,否則匿名用戶優先權較高會阻擋連線。

七、重建權限表緊急方案

刪除 mysql 目錄下所有 *.frm/.MYI/.MYD,再執行 mysql_install_db(可先修改腳本自訂預設權限)。

掌握權限體系,是守護資料資產的第一道防線。

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