sql >> Databáze >  >> RDS >> Sqlserver

SQL šifrované sloupce v klauzuli WHERE

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 .



  1. MySQL s C#, z pohledu vývojáře PHP

  2. Snížení nákladů na hostování databáze:DigitalOcean vs. AWS vs. Azure

  3. Upozornění:mysqli_select_db() očekává přesně 2 parametry, z nichž 1 je uveden

  4. Přidejte název aplikace / název programu do připojovacího řetězce mysql