0

Customer エンティティ (EntityFrameworks) の IQueryable リストがあります。この IQueryable リストで orderby を実行する必要がありますが、問題は、順序付けに使用するフィールドがデータベースで暗号化されていることです。注文する前にこのフィールドを解読する方法はありますか? OrderBy の何らかの Linq 拡張機能を作成できますか。何千もの顧客が存在する可能性があるため、ソートできるようにするためだけにリストを具体化したくありません...

4

2 に答える 2

0

今のところ無理そうです。

復号化がデータベースで行われる場合にのみ可能であり、復号化アルゴリズムは SQL ステートメントに変換できないため、不可能です。

于 2012-10-26T04:50:41.893 に答える
0

暗号化されたフィールドがあるため、すべての行を最初に復号化しないと、復号化値でリストを並べ替えることができません。これはもちろん、順序付けを行うには、最初にフィールドの値を知る必要があるためです。そのため、暗号化に何らかの順序付けを行うパターンが存在しない限り (この場合、暗号化アルゴリズムが不適切です!)、運が悪いことになります。 .

データベースが危険にさらされた場合、誰かが暗号化された値にアクセスすることに対する保護がないため、SQL 内に復号化手法を配置することはお勧めしません。たとえば、顧客の暗号化されたすべての値とそれらを復号化する方法を含むデータベースのバックアップを誰かが手に入れたとします。

可能なハッキーな解決策は、暗号化された値から計算されたある種の順序付けインデックスを別の列に格納することです。たとえば、データがアルファベット順であるとします。暗号化されていない値の最初の文字を別の列に格納できます。これにより、少なくとも、行に持ち込む必要がある行の数を最小限に抑えることができます。

于 2012-10-26T07:08:55.950 に答える