sql >> Database >  >> RDS >> Sqlserver

SQL-gecodeerde kolommen in WHERE-clausule

De typische manier is om zowel de versleutelde waarde en . op te slaan een one-way hash van de waarde. Wanneer u een specifieke waarde zoekt, zoekt u naar de hash. Op deze manier kunt u efficiënt query's uitvoeren, zonder dat u elke . hoeft te decoderen rij om de waarde te vinden waarin u geïnteresseerd bent:

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

In theorie kun je een keer in een blauwe maan een hash-conflict hebben, om paranoïde veilig te zijn, voeg je een dubbele controle toe aan de gedecodeerde kolom:

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

Zie ook Versleutelde gegevens indexeren en SQL Server 2005:versleutelde gegevens zoeken .



  1. Verzamelmethode:VERLENG Procedure in Oracle Database

  2. Hoe toegang krijgen tot de Oracle-database via het netwerk?

  3. Hoe postgres incrementele updates opvragen sinds een bepaald punt (een tijdstempel of een transactie-ID)?

  4. installeer zowel mysql als mysqlnd op ubuntu 12.04