MySQL 二進制日誌檔案和中繼日誌檔案可以加密,有助於保護這些檔案以及其中包含的潛在敏感資料,使其免受外部攻擊者的濫用,也免受儲存它們的作業系統使用者未經授權的檢視。用於檔案的加密演算法,即 AES(進階加密標準)密碼演算法,內建於 MySQL 伺服器中,無法設定。
您可以在 MySQL 伺服器上設定 binlog_encryption
系統變數為 ON
來啟用此加密。OFF
是預設值。系統變數會針對二進制日誌檔案和中繼日誌檔案設定加密。二進制日誌記錄不需要在伺服器上啟用即可啟用加密,因此您可以在沒有二進制日誌的複本上加密中繼日誌檔案。若要使用加密,必須安裝和設定金鑰環元件或外掛程式,以提供 MySQL 伺服器的金鑰環服務。如需執行此操作的指示,請參閱 第 8.4.4 節,「MySQL 金鑰環」。任何支援的金鑰環元件或外掛程式都可用來儲存二進制日誌加密金鑰。
當您首次啟用加密功能啟動伺服器時,在初始化二進位日誌和中繼日誌之前,會產生一個新的二進位日誌加密金鑰。此金鑰用於加密每個二進位日誌檔(如果伺服器啟用二進位日誌記錄)和中繼日誌檔(如果伺服器有複製通道)的檔案密碼,並且從檔案密碼生成的進一步金鑰會用於加密檔案中的資料。目前在伺服器上使用的二進位日誌加密金鑰稱為二進位日誌主金鑰。兩層加密金鑰架構意味著可以根據需要輪換(用新的主金鑰替換)二進位日誌主金鑰,並且只需要使用新的主金鑰重新加密每個檔案的檔案密碼,而不需要重新加密整個檔案。中繼日誌檔會為所有通道加密,包括在啟用加密後建立的新通道。二進位日誌索引檔案和中繼日誌索引檔案永遠不會加密。
如果您在伺服器執行時啟用加密,則此時會產生一個新的二進位日誌加密金鑰。例外情況是如果先前在伺服器上啟用了加密,然後又停用了加密,在這種情況下,將再次使用先前使用的二進位日誌加密金鑰。二進位日誌檔案和中繼日誌檔案會立即輪換,並且新檔案以及後續所有二進位日誌檔案和中繼日誌檔案的檔案密碼都會使用此二進位日誌加密金鑰進行加密。伺服器上仍然存在的現有二進位日誌檔案和中繼日誌檔案不會加密,但如果不再需要它們,您可以清除它們。
如果您將 binlog_encryption
系統變數變更為 OFF
來停用加密,二進位日誌檔案和中繼日誌檔案會立即輪換,並且所有後續記錄都不會加密。先前加密的檔案不會自動解密,但伺服器仍然能夠讀取它們。需要 BINLOG_ENCRYPTION_ADMIN
權限才能在伺服器執行時啟用或停用加密。
加密和未加密的二進位日誌檔案可以使用加密日誌檔案開頭的檔頭中的魔術數字 (0xFD62696E
) 來區分,此數字與未加密日誌檔案的魔術數字 (0xFE62696E
) 不同。SHOW BINARY LOGS
陳述式會顯示每個二進位日誌檔案是加密還是未加密。
當二進位日誌檔案已加密時,mysqlbinlog 無法直接讀取它們,但可以使用 --read-from-remote-server
選項從伺服器讀取它們。如果您使用 mysqlbinlog 備份加密的二進位日誌檔案,請注意,使用 mysqlbinlog 產生的檔案副本會以未加密的格式儲存。
二進位日誌加密可以與二進位日誌事務壓縮結合使用。有關二進位日誌事務壓縮的更多資訊,請參閱 第 7.4.4.5 節「二進位日誌事務壓縮」。