Зашифрованные поля и полнотекстовый поиск, лучший подход? - PullRequest
9 голосов
/ 04 августа 2009

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

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

Какой лучший способ зашифровать эти поля, но при этом разрешить поиск?

Ответы [ 5 ]

9 голосов
/ 04 августа 2009

Это не будет легко. То, что вы описываете, редко применяется в коммерческих базах данных, хотя в этой области есть некоторые теоретические результаты. Я бы посоветовал вам перейти на google scholar и начать поиск статей по этому вопросу.

Вот несколько ссылок для начала:

3 голосов
/ 04 августа 2009

НЕТ базы данных, поддерживающей зашифрованный индекс, поэтому вам придется пожертвовать некоторой безопасностью, чтобы достичь этого.

Вы можете индексировать частичные данные в открытом виде и находить реальные данные из вашего приложения. Например, если вы хотите хранить номер кредитной карты. Вы можете иметь индекс из последних 4 цифр. Количество карт с одинаковыми последними 4 цифрами ограничено, поэтому вы можете позволить себе расшифровать каждую из них и проверить целое число.

2 голосов
/ 14 августа 2009

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

1 голос
/ 23 октября 2009

Oracle 10g Release 2 (или более поздней версии) может поддерживать эту функцию. С их сайта здесь:

http://www.oracle.com/technology/oramag/oracle/05-sep/o55security.html

"Новая функция в Oracle Database 10g Release 2 позволяет вам сделать это: вы можете объявить столбец как зашифрованный без записи одной строки кода. Когда пользователи вставляют данные, база данных прозрачно шифрует их и сохраняет в Аналогично, когда пользователи выбирают столбец, база данных автоматически расшифровывает его. Поскольку все это выполняется прозрачно без каких-либо изменений в коде приложения, функция имеет соответствующее имя: прозрачное шифрование данных (TDE). "

Идея состоит в том, что никто не может видеть открытый текст в базе данных, но оператор выбора будет работать как обычно. Это может помочь с поиском, если Oracle - вариант?

Обновление: здесь есть еще один вариант:

http://www.critotech.com/index.htm

для баз данных MySQL, но это кажется довольно дорогим.

0 голосов
/ 01 сентября 2015

Я знаю, что это старый ответ, но и у SQL Server, и у Oracle теперь есть (дорогие) предложения для прозрачного шифрования данных, которые в основном позволяют вашему приложению выполнять поиск без изменений, но реальные данные в покое шифруются. Больше информации здесь:

SQL Server: https://msdn.microsoft.com/en-us/library/bb934049%28v=sql.120%29.aspx

Oracle: http://www.oracle.com/technetwork/database/options/advanced-security/index-099011.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...