sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-krypterede kolonner i WHERE-klausul

Den typiske måde er at gemme både den krypterede værdi og en envejs-hash af værdien. Når du søger en bestemt værdi, vil du søge hashen. På denne måde kan du forespørge effektivt uden at skulle dekryptere hver række for at finde den værdi, du er interesseret i:

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);

I teorien kan du have en hash-konflikt én gang i en blå måne, for at være paranoid-sikker tilføjer du et dobbelttjek på den dekrypterede kolonne:

select PlainA, plainB, PlainC
from table
where HashValue = HashBytes('SHA1', @searchTerm)
and DecryptByKey(..., EncryptedColumn) = @searchTerm;

Se også Indeksering af krypterede data og SQL Server 2005:søgning i krypterede data .



  1. hvordan man henter meddelelser fra databasen med forskellige typer meddelelser

  2. Kassér millisekunddelen fra tidsstemplet

  3. Laravel - PDO Prepared Statement - Kan ikke udføre forespørgsler, mens andre ubuffrede forespørgsler er aktive

  4. Opdatering af SQL Server-tabeller med færre afbrydelser ved hjælp af partitionsskift