隨著網路應用普及,資料庫直接暴露於網路環境,面臨攔截、暴力破解、提權等風險。MySQL 提供多層次防禦機制,本文系統梳理帳號權限模型、SSL 加密傳輸、授權表結構、敏感資料哈希存儲四大支柱。
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,實現資料庫級隔離
mysql.user 表。mysql.db、tables_priv、columns_priv 判斷庫/表/列級權限。| 權限 | 風險說明 |
|---|---|
| FILE | 可執行 LOAD DATA INFILE 讀取任意伺服器檔案,極易導致資料洩露。 |
| PROCESS | 可查看 SHOW PROCESSLIST、殺死他人查詢,洩露 SQL 細節。 |
| SUPER | 可終止任意查詢、修改全域變數、控制複寫。 |
| SHUTDOWN | 可關閉 MySQL 服務。 |
| RELOAD | 可執行 FLUSH TABLES/STATUS/PRIVILEGES 等管理命令。 |
SHOW VARIABLES LIKE 'have_openssl'; 返回 YES 即可用。-- 僅允許 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 維護,極具彈性。
單向哈希:加密串 = Hash(明文),不可逆。驗證時對輸入同樣加密後比對,避免明文存儲風險。
| 函數 | 輸出長度 | 特點 |
|---|---|---|
| MD5() | 32 hex | 廣泛相容、速度快、推薦用於密碼/Token |
| SHA1() | 40 hex | 比 MD5 強,但已被撞擊攻擊破解,漸棄用 |
| PASSWORD() | 16/41 hex | MySQL 內部認證專用,版本間不相容,不建議業務使用 |
| ENCRYPT() | 變長 | 基於 Unix crypt(),需 CHAR BINARY 存儲區分大小寫 |
-- 註冊/修改密碼
INSERT INTO users (username, pwd_hash) VALUES ('alice', MD5('secret123'));
-- 登入驗證
SELECT * FROM users WHERE username = 'alice' AND pwd_hash = MD5('secret123');
優點:查詢日誌、進程列表僅顯示哈希值,明文不落盤。
REQUIRE SSL,防止明文傳輸。MD5 或更強的 SHA256(MySQL 5.5+ SHA2()),禁用 PASSWORD()。mysql.user 匿名帳號、弱密碼、過期帳號。資料庫安全是系統工程,需從帳號、傳輸、存儲、網路、審計多維度佈防。