web-dev-qa-db-ja.com

MySQLのデータベースファイルは暗号化されていますか?

アプリケーションとは別のサーバーでホストされているMySQLデータベースにユーザー資格情報を安全に保存しようとしています(2つの間の通信は安全です)。

私は当初、MySQLのユーザー名/パスワードを知らないと、誰もデータにアクセスして読み取ることができないと想定していました。ただし、攻撃者がこのSQLサーバーにアクセスして、ディスク上にあるデータベースファイルのコピーを作成するシナリオが存在する可能性があることに気付きました。

ディスクに保存されているMySQLデータベースファイルは暗号化されていますか?

MySQLのユーザー名/パスワードを知らなくても、これらのファイルからデータを直接読み取ることはできますか?アプリケーションで資格情報を暗号化および復号化し、暗号化されたバージョンのみをDBに保存することを検討していますが、これは必要ですか?

11
leopik

ディスクに保存されているMySQLデータベースファイルは暗号化されていますか?

いいえそうではありません。

。ibd または 。myd ファイルを別のシステムに移動することで、(比較的)簡単にテストできます。または、それらを開くだけで、テーブルのコンテンツの少なくとも一部がプレーンテキストで表示される可能性があります。

一部のMySQLエンジンは innodb などのオプションの暗号化を提供します。 MySQL Enterprise Edition はオプションの暗号化も提供します。

14
tim

MySQLのユーザー名/パスワードを知らなくても、これらのファイルからデータを直接読み取ることはできますか?

あなたは賭けます。

アプリケーションで資格情報を暗号化および復号化し、暗号化されたバージョンのみをDBに保存することを検討していますが、これは必要ですか?

プレーンテキストのパスワードをデータベースに保存しないでください。また、対称暗号化も使用しないでください(使用すると、暗号化されたパスワードと共にキーが盗まれたときに、失われます)。

パスワードを保存する方法(どこにでも-フラットファイル、データベース、その他のどこに保存しても問題ありません)は、安全なハッシュ関数を使用してソルトおよびハッシュすることです。ハッシュ関数は入力文字列を受け取り、固定長のランダムに見える文字列を出力として返します。このランダムに見える文字列をデータベースに保存します。

誰かが正しいパスワードを入力したかどうかを確認する場合は、ハッシュ関数を使用してパスワードを実行し、結果の文字列をデータベース内の文字列と照合します。

このようにして、パスワードは公開されません(ハッシュ関数は一方向関数です。つまり、多大な労力なしにハッシュ関数を逆転させることはできません)。

パスワードをハッシュするだけでは十分ではないことに注意してください。ハッシュする前にランダムなソルト値をパスワードに連結し、ハッシュ関数の出力とソルト値の両方をデータベースに保存する必要があります。これを行う必要があるのにはいくつかの理由があります。1。そうしないと、同じパスワードで同じハッシュ値が生成されます。2。しばらく手元にいる人が、ハッシュされたパスワードのテーブル(レインボーテーブル)を事前に計算できます。ソルト値を使用すると、この操作がはるかに高価になります。

パスワードのハッシュに使用できるハッシュ関数があります(bcryptなど)。自分でロールするのではなく、そのうちの1つを使用してください。 md5やsha1などの標準ハッシュ関数を使用しないでください。これらはすべて、高速になるように設計されています。これは、パスワードハッシュ関数で望んでいるものとは逆です(パスワードファイルが盗まれたときに、ブルートフォース攻撃を難しくします)。

6
Out of Band

攻撃者がこのSQLにアクセスできる場所

この時点で、彼らはすでにほとんどのセキュリティ制御を回避しており、通常は攻撃の目的であるデータへのアクセス権を持っています(通常、資格情報の盗用は、データへのアクセス権を取得する目的で行われます)。ユーザーパスワードは安全にハッシュ化する必要があります(ネイティブのmysqlパスワードはデータベースに保持されますが、アプリケーションでは暗号化されずに保持されます)。

LUKSやFuseなどのあらゆる透過的な暗号化も、実行中のサーバーにアクセスできる攻撃者に対して透過的です。

ユーザー名をハッシュして匿名性を高めるなどの考慮事項があるかもしれません(Ashley Maddison攻撃を検討してください)。ただし、ゲームのこの段階でまだ何を保護しようとしているのか理解していないと、アドバイスするのは困難です。攻撃者がここまで到達するのを防ぐこと、サーバーの潜在的な侵害を検出することに注意を向けることで、より多くの利益を得ることができると思います。

1
symcbean
Are MySQL database files that are stored on disk encrypted?

いいえMySQLはデフォルトではファイルを暗号化しません。暗号化するデータの種類は明確ではありませんが、この場合の最適なソリューションは列ベースの暗号化ソリューションのようです。これにより、機密情報を含む選択した列を暗号化し、各列ごとにポリシー/暗号化キーを定義できます。

優れたソリューションでは、enc/decキーのライフサイクルを制御することもできます。

これらはすべて、特に深刻な個人データ保護規制への準拠に非常に役立ちます。

このソリューション「MyDiamo」 は、列ベースの暗号化の実行可能なオプションであり、価格はかなり妥当です。

ファイルレベルの暗号化が必要な場合は、上記のようにMySQL Enterprise暗号化を使用することをお勧めします。

1
NA AE