Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL шифровани колони в клаузата WHERE

Типичният начин е да се съхранят както шифрованата стойност и еднопосочен хеш на стойността. Когато търсите конкретна стойност, ще търсите хеша. По този начин можете да правите заявки ефективно, без да се налага да декриптирате всеки ред, за да намерите стойността, която ви интересува:

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

На теория можете да имате хеш конфликт веднъж на синя луна, за да се предпазите от параноя, добавяте двойна проверка на дешифрираната колона:

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

Вижте също Индексиране на шифровани данни и SQL Server 2005:търсене на криптирани данни .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Бавна производителност на SqlDataReader

  2. Подреждане по низходяща дата - месец, ден и година

  3. Как да получите първия и последния запис на група в SQL Server 2008?

  4. не може да предаде стойност като float

  5. SQL GUID срещу цяло число