2012-02-22 10 views
5

私は自分のアプリケーションでデータベースに接続するデータベースでデータベース暗号化を使用したいと考えています。エンティティフレームワーク。エンティティフレームワークを使用したSQL Server 2008 R2暗号化

バックデータベースに暗号化されたデータを書き込む&暗号化されていないデータを取得することができるようにする簡単な方法/ベストプラクティスはあります。私は特に手動でedmx xmlを編集する必要はありませんが、これを達成する方法を教えてくれるいくつかのリソースを見つけるのには苦労しています。

私は、対称鍵、トリプルDES暗号化アルゴリズムを使用することを計画しています。

+0

これはセキュリティで保護されたチャネルではなく、暗号化されたデータを保存することに関するものですか? –

+0

はい、暗号化されたデータを格納します。 –

答えて

5

することは、SQL Server 2008 R2の暗号化とはどういう意味ですか - それは意味をたくさん持っているので、それは非常に漠然とした質問です。

あなたの一般的なオプション:

  • 透過的なデータ暗号化 - 、SQL Serverの機能 - データベース全体は、SQL Server側で暗号化されます。アプリケーションを変更する必要はなく、EFで動作するはずです。
  • セルレベルの暗号化 - SQL Serverの機能 - 選択された列は暗号化され、varbinaryとして格納されます。これには特殊な照会とストアのコマンドが必要です。したがって、EFを使用する場合は、特殊なデータベース・ビューとストアード・プロシージャーを使用してDBと対話する必要があります。データベースビューとストアドプロシージャを使用しない場合は、EDMXを手動で維持して、すべてのSQLコマンドをSSDLパートに書き込む必要があります。
  • 暗号化は、アプリケーションで実行 - あなたは復号化および暗号化自分自身を処理するためにObjectMaterializedSavingChangesイベントを使用します。プロパティのデータ型は変更しないでください(文字列の場合は、暗号化された値をbase64文字列として格納する必要があるため)、おそらく文字列またはバイナリデータのみを暗号化および復号化することができます。
+0

あなたの完全な答えをありがとう。 私はすでに必要な暗号化のレベルを提供しないので、私はすでにTDEを割り引いています。私はまた、私はこれがSQL暗号化と同じくらい有利ではないと思うので、私のアプリで暗号化したくない。 2番目の選択肢のように見えますが、私がしなければならないことがあります。私が望むやり方で動作するEFの別の方法はないと思います。 –

+0

@Ladislav Mrnka:セルレベルの暗号化のために、SPとビューを使用してDBとやりとりする場合、ハッカーが同じSP /ビューを使用してデータを復号化できないのはなぜですか? – ribald

+1

@ribald:ディスク上でデータを暗号化することについてです。攻撃者が通常の接続を介してデータベースにアクセスするための資格情報を取得した場合、データを保護するためにデータベースレベルで任意の種類の透過またはセルレベルの暗号化を実行できます。 –

0

あなたは、復号化されたデータを返すビューを作成することができます。例えば

CREATE VIEW [your_view_name] as 
SELECT 
CONVERT(varchar(200),DECRYPTBYPASSPHRASE('[your_symmetric_key]', [encrypted_field])) As [encrypted_field], 
FROM [your_table_name] 

次に、あなたのEFモデルにエンティティとしてビューを追加します。

、挿入、更新、または削除操作を、ストアドプロシージャを使用します。

+0

これは対称キーをビュー定義の権利にハードコーディングすることを意味しますか?また、ビューにアクセスできる人は誰でも閲覧することができます。 –

+0

私の正面玄関はそこにあり、それはロックされていませんが、あなたが必要な場合に備えてここにキーがあります。 – Tony

関連する問題