MySQL 8.0.14 からは、バイナリログファイルとリレーログファイルを暗号化できるため、これらのファイルとそれらに含まれる潜在的機密データを、外部の攻撃者による誤用から保護したり、格納されているオペレーティングシステムのユーザーによる不正な表示から保護したりできます。 ファイルに使用される暗号化アルゴリズム AES (Advanced Encryption Standard) 暗号アルゴリズムは、MySQL Server に組み込まれており、構成できません。
MySQL サーバーでこの暗号化を有効にするには、binlog_encryption
システム変数を ON
に設定します。 OFF
がデフォルトです。 システム変数は、バイナリログファイルおよびリレーログファイルの暗号化をオンに設定します。 暗号化を有効にするためにバイナリロギングをサーバー上で有効にする必要はないため、バイナリログのないレプリカ上のリレーログファイルを暗号化できます。 暗号化を使用するには、MySQL Server 鍵リングサービスを提供するように鍵リングプラグインをインストールして構成する必要があります。 これを行う手順は、セクション6.4.4「MySQL キーリング」 を参照してください。 サポートされている任意のキーリングプラグインを使用して、バイナリログ暗号化鍵を格納できます。
暗号化を有効にしてサーバーを初めて起動すると、バイナリログとリレーログが初期化される前に新しいバイナリログ暗号化鍵が生成されます。 このキーは、各バイナリログファイル (サーバーでバイナリロギングが有効になっている場合) およびリレーログファイル (サーバーにレプリケーションチャネルがある場合) のファイルパスワードを暗号化するために使用され、ファイルパスワードから生成された以降の鍵を使用してファイル内のデータが暗号化されます。 サーバーで現在使用されているバイナリログ暗号化鍵は、バイナリログマスターキーと呼ばれます。 2 層暗号化キーアーキテクチャでは、必要に応じてバイナリログマスターキーをローテーション (新しいマスターキーに置換) でき、各ファイルのファイルパスワードのみを新しいマスターキーで再暗号化する必要があり、ファイル全体ではありません。 リレーログファイルは、暗号化がアクティブ化された後に作成される新しいチャネルを含め、すべてのチャネルに対して暗号化されます。 バイナリログインデックスファイルとリレーログインデックスファイルは暗号化されません。
サーバーの実行中に暗号化をアクティブ化すると、その時点で新しいバイナリログ暗号化鍵が生成されます。 例外は、以前にサーバー上で暗号化がアクティブであり、その後無効になっていた場合です。その場合、以前に使用されていたバイナリログ暗号化鍵が再度使用されます。 バイナリログファイルとリレーログファイルはただちにローテーションされ、新しいファイルとそれ以降のすべてのバイナリログファイルおよびリレーログファイルのファイルパスワードは、このバイナリログ暗号化鍵を使用して暗号化されます。 既存のバイナリログファイルとリレーログファイルはまだサーバー上に存在していても暗号化されませんが、不要になった場合はパージできます。
binlog_encryption
システム変数を OFF
に変更して暗号化を非アクティブにすると、バイナリログファイルとリレーログファイルはただちにローテーションされ、それ以降のすべてのロギングは暗号化されません。 以前に暗号化されたファイルは自動的に復号化されませんが、サーバーはそれらを読み取ることができます。 サーバーの実行中に暗号化をアクティブ化または非アクティブ化するには、BINLOG_ENCRYPTION_ADMIN
権限が必要です。
暗号化されたバイナリログファイルと暗号化されていないバイナリログファイルは、暗号化されたログファイル (0xFD62696E
) のファイルヘッダーの先頭にあるマジック番号を使用して区別できます。これは、暗号化されていないログファイル (0xFE62696E
) に使用されるものとは異なります。 SHOW BINARY LOGS
ステートメントは、各バイナリログファイルが暗号化されているか暗号化されていないかを示します。
バイナリログファイルが暗号化されている場合、mysqlbinlog はそれらを直接読み取ることはできませんが、--read-from-remote-server
オプションを使用してサーバーから読み取ることができます。 MySQL 8.0.14 から、暗号化されたバイナリログファイルを直接読み取ろうとしたが、古いバージョンの mysqlbinlog がそのファイルをバイナリログファイルとして認識しない場合、mysqlbinlog は適切なエラーを返します。 mysqlbinlog を使用して暗号化バイナリログファイルをバックアップする場合、mysqlbinlog を使用して生成されるファイルのコピーは暗号化されていない形式で格納されることに注意してください。
バイナリログ暗号化は、バイナリログトランザクション圧縮 (MySQL 8.0.20 の時点で使用可能) と組み合わせることができます。 バイナリログのトランザクション圧縮の詳細は、セクション5.4.4.5「バイナリログトランザクション圧縮」 を参照してください。