典型的な方法は、暗号化された値 と の両方を保存することです 値の一方向ハッシュ。特定の値を探すときは、ハッシュを探します。このようにして、すべてを復号化することなく、効率的にクエリを実行できます 興味のある値を見つけるために、行:
create table Table ( EncryptedColumn varbinary(max), HashValue binary(20), PlainA int, PlainB varchar(256), PlainC Datetime); create index ndxTableHash on Table(HashValue); select PlainA, plainB, PlainC from table where HashValue = HashBytes('SHA1', @searchTerm);
プレ>理論的には、ブルー ムーンに 1 回ハッシュの競合が発生する可能性があります。パラノイアの安全を確保するために、復号化された列にダブル チェックを追加します。
select PlainA, plainB, PlainC from table where HashValue = HashBytes('SHA1', @searchTerm) and DecryptByKey(..., EncryptedColumn) = @searchTerm;
プレ>暗号化されたデータのインデックス作成 もご覧ください。 および SQL Server 2005:暗号化されたデータの検索 .