Зашифрованные столбцы SQL в предложении WHERE

Я хочу применить шифрование на уровне столбцов SQL с использованием симметричных ключей. Первые шаги, необходимые для создания главного ключа базы данных, сертификатов и симметричных ключей, кажутся простыми, и я успешно протестировал шифрование / дешифрование данных с использованием симметричных ключей.

Однако, как только данные зашифрованы, я не знаю, как лучше их запросить. Например.

SELECT PlainTextA, PlainTextB, PlainTextC 
WHERE CONVERT(varchar, DECRYPTBYKEY(EncyptedColumn)) = @SearchTerm

обязательно приведет к полному сканированию таблицы?

Другой вариант, который, как я думал, может сработать, - это сначала зашифровать критерии поиска, например

SELECT PlainTextA, PlainTextB, PlainTextC 
WHERE EncyptedColumn = ENCRYPTBYKEY(KEY_GUID('KeyName'), @SearchTerm)

, но это не работает, поскольку генерируемое зашифрованное значение всегда разное.

Мы будем очень благодарны за любые предложения.

12
задан Matt F 24 August 2010 в 20:21
поделиться

1 ответ

Один из вариантов - добавить новый столбец в таблицу (или иметь представление WITH SCHEMABINDING с вычисляемым столбцом в нем и проиндексировать его) с односторонним хешем значения поиска. Это не обязательно должен быть сильный хэш - что-то более простое, как CHECKSUM, будет работать . Затем вы хешируете поисковое значение в вашем поиске и фильтруете его по хешу, который индексируется. Таким образом, вы можете предоставить доступ к чему-либо с возможностью поиска и индексации, не раскрывая при этом само значение.

Однако, если есть другой способ сделать это напрямую, я хотел бы знать, что это такое :)

2
ответ дан 2 December 2019 в 21:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: