3

を使用して暗号化されているテーブルの 1 つにフィールドがあります。

ENCRYPTBYPASSPHRASE(<passphrase>,<value>)

値がオブジェクトに配置されると、フィールドはまだ暗号化されているため、何もできません。フィールドを暗号化する目的が無効になるため、データベース上のフィールドを復号化するビュー、ストアド プロシージャ、またはその他のアイテムを作成できません。フレームワークを次のように実行する方法はありますか

DECRYPTBYPASSPHRASE(<passphrase>, <columnName>)

オブジェクトに値を代入する前に?

現在、データを取得してから ExecuteQuery を呼び出して値を復号化しています。そして、その新しい値をデータ モデル クラスの暗号化された値に割り当てます。それは機能しますが、私が知らないいくつかのオプションを使用して自動的に実行できるかどうか疑問に思っていました. 検索してみましたが、何も見つかりませんでした。

4

2 に答える 2

1

linq-to-sql を使用していて、プル元のテーブルが次のように構成されていると想定しています。

+--------+---------------+
| UserId |   Passphrase  |
+--------+---------------+
|      1 | laskdfmlsadkf |
+--------+---------------+

この情報を使用して、選択中に復号化方法を適用できます。

var password = "password";
var userId = 1;

var result = usertable.Where(c => c.UserId == userId).ToList()
.Select(t => new 
{
    Passphrase = DECRYPTBYPASSPHRASE(t.Passphrase)
}).First()

bool areSame = (password == result.Passphrase);
于 2013-08-22T16:53:32.787 に答える
0

この fiddleで示されているように、次の SQL は完全に効果的です。

SELECT
            E.[Key],
            CAST(
                      DecryptByPassPhrase(
                          'test',
                          E.[Encrypted])
                AS
                    varchar(8000)) [Clear],
            E.[Other]
    FROM
            [Example] E;

したがって、この ExecuteQuery のオーバーロードを使用して、次のようなことを行います。

var examples = context.ExecuteQuery<Example>(
    @"SELECT
                E.[Key],
                CAST(
                          DecryptByPassPhrase(
                              @p0,
                              E.[Encrypted])
                    AS
                        varchar(8000)) [Clear],
                E.[Other]
        FROM
                [Example] E;",
    passPhrase);

1 回の呼び出しでデータを取得して復号化します。

于 2013-09-23T11:54:40.280 に答える