あなたが恐れていることは絶対に可能です。ただし、それは実際には問題ではありません。説明させてください:
MySQLは現在、さまざまな種類のログを使用しています。
- バイナリログ-これらはレプリケーション用であり、すべての書き込みクエリが(可逆的なバイナリ形式で)書き込まれます。レプリケーションを実行している場合は、これらのログが必要です。
- クエリログ-これらはデバッグ用です(通常)。これらは本番環境では有効にされないことがよくあります(無効にする必要があります)。
- InnoDBトランザクションログ-これは、トランザクションがACIDに準拠できるようにするためにすべての書き込みに使用されます(詳細はこの回答の範囲外です)。
- その他のログ-ここで心配する必要はありません(エラーログ、遅いクエリログなど)。
したがって、データは通常、少なくとも1つのログファイルに書き込まれますが、場合によっては3つに書き込まれます(サーバー構成によって異なります)。
ただし、ディスクにも書き込まれます。これは、テーブルスペースに適度にプレーンテキスト形式で格納されます。したがって、(攻撃者として)ディスクにアクセスできる場合は、ログをスキップして、テーブル情報自体を確認します。
これで、データベースレイヤーでパスワードを「ハッシュ」している場合(つまり、プレーンテキストのパスワードがクエリに入力され、データベースがハッシュ関数を発行する場合)、ログでプレーンテキストのパスワードが生成される可能性があります。 。
それはそれだけの価値はありません
ログをフラッシュしてこの情報を隠そうとする価値はありません。ソースから問題を修正することをお勧めします(アプリケーションでより適切なハッシュ方法を使用してください)。
問題は、MySQLが使用するハッシュが単純なプリミティブハッシュ(MD5()
またはなどSHA256()
)であるということです。どちらも高速になるように設計されています。したがって、テーブルからハッシュされたものを取得できれば、生のパスワードを使用するのとほぼ同じくらい簡単に攻撃できます。なんで?高速ハッシュはGPUを使用するとブルートフォース攻撃が容易であるためです。
TLDR
基本的に、あなたは2つのことをしなければなりません(少なくとも私の観点から):
- 人々がDBのファイルシステムにアクセスできないようにします。これが何よりもまずです。
- 適切なパスワード保存技術(bcryptなど)を使用します。これにより、ログファイルがもたらす可能性のあるベクトルが軽減されます。