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

MySQL 資料庫網路安全防禦體系:帳號權限、SSL 加密與哈希存儲全解析

     編輯:MySQL 資料庫相關知識

前言

隨著網路應用普及,資料庫直接暴露於網路環境,面臨攔截、暴力破解、提權等風險。MySQL 提供多層次防禦機制,本文系統梳理帳號權限模型、SSL 加密傳輸、授權表結構、敏感資料哈希存儲四大支柱。

一、帳號安全:三層檢查機制

1.1 帳號結構:用戶名 + 密碼 + 來源位置

MySQL 帳號由 用戶名/密碼/位置(Host) 三元組唯一確定,不包含資料庫名。同一用戶可針對不同資料庫設定不同密碼:

GRANT SELECT ON db1.* TO 'abc'@'server1' IDENTIFIED BY 'pwd1';
GRANT SELECT ON db2.* TO 'abc'@'server1' IDENTIFIED BY 'pwd2';
-- abc 訪問 db1 用 pwd1,訪問 db2 用 pwd2,實現資料庫級隔離

1.2 三類安全檢查

  1. 登錄驗證:用戶名/密碼/來源 IP 匹配 mysql.user 表。
  2. 授權檢查:登入後,依 mysql.db、tables_priv、columns_priv 判斷庫/表/列級權限。
  3. 訪問控制:具體操作權限(SELECT、INSERT、UPDATE、DELETE、INDEX、ALTER、CREATE、DROP、GRANT、REFERENCES 等),均為布林值。

1.3 高危全域權限(謹慎授予)

權限風險說明
FILE可執行 LOAD DATA INFILE 讀取任意伺服器檔案,極易導致資料洩露。
PROCESS可查看 SHOW PROCESSLIST、殺死他人查詢,洩露 SQL 細節。
SUPER可終止任意查詢、修改全域變數、控制複寫。
SHUTDOWN可關閉 MySQL 服務。
RELOAD可執行 FLUSH TABLES/STATUS/PRIVILEGES 等管理命令。

二、SSL 加密傳輸:防竊聽與中間人攻擊

2.1 啟用條件

  • MySQL ≥ 4.1,編譯支援 OpenSSL(Linux 版預設未啟用,Windows 版內建)。
  • 檢查:SHOW VARIABLES LIKE 'have_openssl'; 返回 YES 即可用。

2.2 GRANT REQUIRE 子句強制加密

-- 僅允許 SSL 連線
GRANT ALL PRIVILEGES ON ssl_db.* TO 'abc'@'%' IDENTIFIED BY 'pwd' REQUIRE SSL;

-- 驗證客戶端憑證 (x509)
GRANT ALL PRIVILEGES ON ssl_db.* TO 'abc'@'%' IDENTIFIED BY 'pwd' REQUIRE X509;

-- 指定客戶端憑證主體
GRANT ALL PRIVILEGES ON ssl_db.* TO 'abc'@'%' IDENTIFIED BY 'pwd'
REQUIRE SUBJECT '/C=US/ST=NY/L=Albany/O=Widgets Inc./CN=client-ray';

-- 指定簽發者
GRANT ALL PRIVILEGES ON ssl_db.* TO 'abc'@'%' IDENTIFIED BY 'pwd'
REQUIRE ISSUER '/C=US/ST=NY/L=Albany/O=Widgets Inc./CN=ca';

-- 指定加密套件
GRANT ALL PRIVILEGES ON ssl_db.* TO 'abc'@'%' IDENTIFIED BY 'pwd'
REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA';

三、五大授權表結構與職責

表名層級核心功能
user全域帳號認證、全域權限、加密密碼存儲
host主機主機級權限,不含用戶維度;GRANT/REVOKE 不影響此表
db資料庫庫級權限
tables_priv資料表表級權限
columns_priv欄位列級權限

所有表均為 MyISAM,可用標準 SQL 維護,極具彈性。

四、哈希加密存儲敏感資料

4.1 原理

單向哈希:加密串 = Hash(明文),不可逆。驗證時對輸入同樣加密後比對,避免明文存儲風險。

4.2 MySQL 內建四大哈希函數對比

函數輸出長度特點
MD5()32 hex廣泛相容、速度快、推薦用於密碼/Token
SHA1()40 hex比 MD5 強,但已被撞擊攻擊破解,漸棄用
PASSWORD()16/41 hexMySQL 內部認證專用,版本間不相容,不建議業務使用
ENCRYPT()變長基於 Unix crypt(),需 CHAR BINARY 存儲區分大小寫

4.3 實戰範例:MD5 存儲與驗證

-- 註冊/修改密碼
INSERT INTO users (username, pwd_hash) VALUES ('alice', MD5('secret123'));

-- 登入驗證
SELECT * FROM users WHERE username = 'alice' AND pwd_hash = MD5('secret123');

優點:查詢日誌、進程列表僅顯示哈希值,明文不落盤。

五、總結與建議

  1. 最小權限原則:僅授業務必需權限,嚴禁濫用全域高危權限。
  2. 啟用 SSL:生產環境強制 REQUIRE SSL,防止明文傳輸。
  3. 密碼哈希化:業務層統一用 MD5 或更強的 SHA256(MySQL 5.5+ SHA2()),禁用 PASSWORD()。
  4. 定期審計:檢查 mysql.user 匿名帳號、弱密碼、過期帳號。
  5. 網路層隔離:資料庫不直接對公網,配合防火牆/VPN/安全組。

資料庫安全是系統工程,需從帳號、傳輸、存儲、網路、審計多維度佈防。

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