2009-08-07 2 views
0

現在、私はSQL暗号化を使用しており、Linqから引き続き使用したいと考えています。私はすべての私のCRUDに格納されたprocを作成し、SQLで暗号化/復号化を処理するためにモデルのテーブルに接続しています。MVCでLinq to Entity w/sql暗号化を使用する

主な問題は、私のデータベースモデルでは、sql暗号化ストレージに使用されるvarbinary(max)というフィールドタイプがあります。

問題:エンティティモデルの設定

A.は - varchar型であるCRUDストアドプロシージャのパラメータに暗号化されたテーブルのvarbinary型のフィールドを割り当てることができません。格納されているprocはvarchar値をとり、それを暗号化して暗号化テーブルのvarbinaryフィールドに格納します。

B.エンティティモデル作成の外側 - 暗号化されたエンティティテーブルを参照するときは、varbinaryフィールドが必要です。本質的には、実際にはvarcharフィールドです。これは、暗号化されたフィールドに値を割り当てようとするときに、変換の問題を引き起こします。

これをどのように回避しますか。私は、このフィールドが私のストアドプロシージャから戻ってきたときのように解読されていると見なすアプリケーションが必要です。 CUD文は文字列の値をとり、エンティティモデル内でそれらに結び付けられたストアドプロシージャは暗号化を行います。

ありがとうございます。

+0

重複:http://stackoverflow.com/questions/1244486/mvc-using-linq-to-entity-w-sql-encryption/1244514#1244514 –

答えて

1

「Linq to SQL」と「Entity Framework」という2つの技術があります。

Entity Frameworkでは、格納されているprocとテーブルの列の署名が一致することが必要です。

これを解決できる方法は2つあります。

  • ストアドプロシージャにダミーのvarbinaryフィールドを追加し、テーブルにvarcharファイルを追加することができます。これにより、すべてが期待通りのものを得ることができます。必要のないフィールドは無視されます。
  • テーブルを使用せずにストアドプロシージャを実行します(EFでストアドプロシージャを実行するさまざまな方法があります)。次に、不一致の問題を回避します。
+0

ご連絡ありがとうございます。私はあなたの提案を試して実装するために金曜日に働いたが、すべてうまく動作しているようだ。どうもありがとうございます! 時間がある場合は、トピックに関連する別の関連する質問を掲載しました: http://stackoverflow.com/questions/1254722 –

2

最近、私たちは正確にその環境でこれを行いました。非常に簡単な解決策ではありません。

エンティティにSQL暗号化を処理させる方法がない場合があります。ここに私がしたことがあります。

エンティティデザイナにテーブルを持ってきました。あなたのテーブルのフィールドは、暗号化されたフィールドで、これらすべてのフィールドを返すSPROCを作成
をVARCHARに
変更は、テーブルが
作成戻すためのSPROC
変更SPROCをインポートし、エンティティマッピングの文字列
にデコードデータベースから暗号化されたフィールドを更新したり、読んでいないために、これらのフィールド更新する別のSPROC(またはテーブル全体を、あなたの選択)
変更テーブル(これはあなたがまだ他のもののためにそのオブジェクトを使用することができます。

また、それらのフィールドを含まないようにエンティティオブジェクトを変更することができます。これらの値はsprocを介して具体的にアクセスされます。

+0

お返事ありがとうございます。私は最初の解決策を検討しましたが、私もあなたもうまくいくと確信しています。とにかくありがとうございました! 時間がある場合は、このトピックに関連する別の質問を掲載しました。あなたも同じ問題に遭遇したようです。 http://stackoverflow.com/questions/1254722 –

関連する問題