mysqlデータベースを暗号化する良い方法は何ですか?それは価値がありますか?


20

データベースの特定のフィールドを暗号化できることは知っていますが、データベースのすべてのフィールドを暗号化することに興味があります。mysqlシェルにはアクセスできるが、復号化キーにはアクセスできないユーザーが、データベースから何も読み取れないようにしたい。

また、誰かがマシンへのルートアクセスを取得したが、復号化キーを持っていなかった場合、データを読み取れないことを確認したいと思います。

どうすればいいですか?それは理にかなっていますか?誰かが必然的にキーにアクセスできるmysqlデータベースにアクセスできるかどうかが心配なので、これは意味がありません。何か不足していますか?


5
DBを専用ボリュームに保存し、dm-cryptとLUKSで暗号化することを検討しましたか?もちろん、それはあなたが求めているものではありませんが、すべてが暗号化されます。GPGでキーファイルを暗号化することもできます。
dsljanus

回答:


10

最小限のフィールドレベルのAESおよびDES暗号化が利用可能です:https : //dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt

クエリごとにキーを指定せずに(またはトリガー/プロシージャに追加せずに)データを読み取ることはできません。

例:

インサート:

INSERT INTO users (username, password) VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123'));

およびSELECT:

SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'root';

また、これにはデータベースへのSSL接続が必要です。

また、下位レベルでは、ファイルシステムも暗号化できます。


2
注:データベースがローカルにない限り、何らかの方法で接続を暗号化する必要があります。そうしないと、パスワードとキーがプレーンテキストとしてネットワーク経由で送信されます。security.stackexchange.com/questions/45838/を

AES、MD5は古く、悪用されています。新しい暗号化とは何ですか?
YumYumYum

これはフィールドを暗号化/復号化する方法の例にすぎませんが、例としてパスワードを使用するのは悪い考えです。暗号化の有無にかかわらず、データベースにハッシュされていないパスワードを使用しないでください。
カエドモン

この答えはフィールドレベルの復号化に関するものですが、質問はそれに関するものではありません:「mysqlデータベースを暗号化するための良い方法」...「データベースの特定のフィールドを暗号化できることは知っていますが、データベースのフィールド。」
LarsH


2

まず、アプリケーションにキーを保存し、アプリケーション層ですべての暗号化を処理します。

次に:MySQLインスタンスとアプリケーション[サーバー]が別々のマシン上にあることを確認します。これにより、MySQLサーバーでのルート侵害により、攻撃者がアプリケーションソースからキーを読み取れないようにします。

このアプローチは過度に思えます。機密データ(パスワード、クレジットカードなど)を適切に処理しますが、すべてを暗号化するのはやりすぎです。(そして、主キーの世界では逆効果になる可能性があります)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.