MySQL 5.6 在安全性方面引入了重要改進,特別是針對密碼在日誌中的洩露風險與連接傳輸加密。本文深度解析其核心機制、配置細節及遺留風險。
CREATE USER、ALTER USER、SET PASSWORD)中的密碼值替換為單向哈希值(SHA-256 等)。log-rawlog-raw=ON:啟用脫敏,密碼以哈希形式記錄。log-raw=OFF:禁用脫敏,密碼以明文寫入通用查詢日誌(極不推薦,僅用於極特殊調試場景)。log-raw 僅影響通用查詢日誌。慢查詢日誌與二進制日誌始終強制脫敏,無法通過此參數關閉。mysql 命令行客戶端內建過濾邏輯:不記錄匹配 *IDENTIFIED*:*PASSWORD* 模式的語句 到客戶端歷史文件(~/.mysql_history),進一步降低本地洩露風險。
儅日誌脫敏到位,以下文件與場景仍可能洩露憑證,務必通過文件系統權限嚴格保護:
master.info、relay-log.info(5.6 仍以明文存儲主庫密碼),權限設置 chmod 600、屬主 mysql:mysql。my.cnf 中若寫明密碼(password=xxx),同樣需限制讀取權限。datasource.password、環境變量等應用層配置。LOAD DATA INFILE 風險:若攻擊者擁有 FILE 權限且能控制 master.info 內容,可構造惡意加載路徑讀取敏感文件。嚴格控制 FILE 權限分配。[mysqld] 指定 ssl-ca、ssl-cert、ssl-key;客戶端指定 --ssl-mode=REQUIRED(或 VERIFY_CA/VERIFY_IDENTITY)。require_secure_transport=ON(5.7.10+ 參數,5.6 需應用層強制)。ALTER INSTANCE RELOAD TLS 5.7+ 支持熱加載)。| 特性 | MySQL 5.6 | MySQL 5.7 | MySQL 8.0 |
|---|---|---|---|
| 日誌密碼脫敏 | 支持(通用/慢查詢/Binlog) | 增強,log-raw 可控 | 默認強制,無法關閉 |
master.info 存儲 | 文件明文 | 表 mysql.slave_master_info(可加密) | 表存儲,支持數據字典加密 |
| 密碼驗證插件 | mysql_native_password (SHA1) | sha256_password | caching_sha2_password (默認,更強) |
| TLS 熱加載 | 不支持 | 不支持 | 支持 ALTER INSTANCE RELOAD TLS |
| 角色/權限模型 | 無 | 無 | 支持 Role、動態權限 |
MySQL 5.6 通過日誌單向哈希脫敏與客戶端歷史過濾,顯著降低了密碼在日誌層面的洩露風險,且無需任何配置即開箱即用。但作為 2013 年發布的版本,其元數據明文存儲、弱密碼插件、無 TLS 熱加載、生命週期已結束(EOL 2021/02)等短板顯而易見。生產環境強烈建議規劃升級至 MySQL 8.0,獲得完整的現代安全特性與長期支持。