在生產環境中,資料庫安全始終是重中之重。MySQL 5.7 之前版本存在預設 root 密碼為空、所有用戶均可存取 test 資料庫等隱患。Oracle 官方在 5.7 版本大幅強化安全性:安裝時隨機生成 root 密碼、移除 test 資料庫、簡化 SSL 配置並預設啟用 SSL 加密連線。
SSL (Secure Sockets Layer) 及其繼任者 TLS (Transport Layer Security) 是為電腦網路提供通訊安全的加密協議。若傳輸不經加密,資料將以明文形式在網路傳輸,極易被竊聽。現今主流網站(Facebook、Twitter、YouTube、淘寶等)均預設啟用 HTTPS(HTTP over TLS)。
應用層面對敏感欄位(密碼、金額)進行遮罩(顯示為 ***)固然重要,但若 DBA 在本機運行 tcpdump 等抓包工具,仍可從網路封包中還原明文資料。因此,必須在 MySQL 伺服器端啟用 SSL 加密通訊,確保傳輸層面的機密性與完整性。
MySQL 5.7 安裝文檔 INSTALL-BINARY 中新增步驟:
shell> bin/mysqld --initialize --user=mysql shell> bin/mysql_ssl_rsa_setup
執行 mysql_ssl_rsa_setup 後,資料目錄將生成以下 PEM 檔案:
ca-key.pem ca.pem client-cert.pem client-key.pem private_key.pem public_key.pem server-cert.pem server-key.pem
mysql> SHOW VARIABLES LIKE 'have_ssl'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | have_ssl | YES | +---------------+-------+
MySQL 5.7 客戶端預設嘗試 SSL 連線:
root@test-1:~# mysql -h10.166.224.32 -udavid mysql> \s -------------- SSL: Cipher in use is DHE-RSA-AES256-SHA
Cipher in use 顯示加密套件即表示連線已加密。
ALTER USER david@'%' REQUIRE SSL;
此後該用戶若嘗試 --ssl=0 連線將報錯 Access denied。
5.6 同樣支援 SSL,但需手動使用 openssl 指令產生金鑰,配置較繁瑣。
測試環境:4 核 CPU 雲主機,全記憶體 SELECT 主鍵查詢(最壞情況)。
測試結果顯示:啟用 SSL 後效能開銷約 25%。主要開銷集中在「建立連線」階段(握手協商金鑰、驗證憑證)。