Typickým způsobem je uložení zašifrované hodnoty a jednosměrný hash hodnoty. Když hledáte konkrétní hodnotu, hledali byste hash. Tímto způsobem můžete dotazovat efektivně, aniž byste museli dešifrovat každý řádek, abyste našli hodnotu, která vás zajímá:
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);
Teoreticky můžete mít konflikt hash jednou za modrý měsíc, abyste byli paranoidní v bezpečí, přidejte dvojitou kontrolu na dešifrovaný sloupec:
select PlainA, plainB, PlainC
from table
where HashValue = HashBytes('SHA1', @searchTerm)
and DecryptByKey(..., EncryptedColumn) = @searchTerm;
Viz také Indexování šifrovaných dat a SQL Server 2005:vyhledávání zašifrovaných dat .