MySQL 5.7 前版本存在預設 root 空密碼、test 資料庫人人可讀等安全隱患。5.7 版本重大改進:
mysql_ssl_rsa_setup 自動配置 SSLSSL (Secure Sockets Layer) 及其繼任者 TLS (Transport Layer Security) 為網路通訊提供加密、認證、完整性保護。未加密傳輸等同明文,極易遭竊聽、篡改。主流網站早已全站 HTTPS。
應用層遮罩敏感欄位(顯示 ***)無法防禦網路層抓包。DBA 本機運行 tcpdump 即可還原明文。必須在傳輸層啟用 SSL,確保「傳輸中加密」。
shell> bin/mysqld --initialize --user=mysql shell> bin/mysql_ssl_rsa_setup
生成檔案(資料目錄):
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 | +---------------+-------+ root@test-1:~# mysql -h10.166.224.32 -udavid mysql> \s SSL: Cipher in use is DHE-RSA-AES256-SHA
ALTER USER david@'%' REQUIRE SSL; # 之後 --ssl=0 連線將失敗 ERROR 1045 (28000): Access denied for user 'david'@'...' (using password: YES)
5.6 需手動 openssl 產生 CA、伺服器/客戶端金鑰,配置 my.cnf 指定路徑,流程繁瑣易出錯。
環境:4 核 CPU 雲主機,全記憶體 SELECT 主鍵查詢(最壞情況)。
Ssl_accept_renegotiates、Ssl_callback_cache_hits、連線建立延遲。mysql_ssl_rsa_setup 一鍵搞定。REQUIRE SSL 可強制執行。