Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Colunas criptografadas SQL na cláusula WHERE


A maneira típica é armazenar o valor criptografado e um hash unidirecional do valor. Quando você procura um valor específico, você procura o hash. Dessa forma, você pode consultar com eficiência, sem precisar descriptografar todos linha para encontrar o valor de seu interesse:
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);

Em teoria, você pode ter um conflito de hash uma vez em uma lua azul, para ser seguro paranóico, adicione uma verificação dupla na coluna descriptografada:
select PlainA, plainB, PlainC
from table
where HashValue = HashBytes('SHA1', @searchTerm)
and DecryptByKey(..., EncryptedColumn) = @searchTerm;

Consulte também Indexação de dados criptografados e SQL Server 2005:pesquisando dados criptografados .