Я работаю над проектом, который использует pkg_crypto для защиты личной информации пользователей.Есть несколько тысяч строк (которые, как ожидается, вырастут до нескольких десятков тысяч), и всякий раз, когда я использую в запросе предложение WHERE
или ORDER BY
, вся таблица дешифруется перед возвратом результатов.Это займет несколько секунд для одного запроса, который пригоден для разработки, но, вероятно, не очень хорош для выпуска.
Есть ли способ создать индекс, который будет работать с зашифрованными столбцами без ущерба для безопасности?
Вставки и выделения выглядят примерно так (с iBatis):
вставка:
INSERT INTO "USER_TABLE"
(
"ID"
,"LOGIN"
,"PASSWORD"
,"NAME"
,"EMAIL"
)
VALUES
(
user_table_seq.nextval,
#login#
,#password#
,pkg_crypto.encrypt(#name#, 'key')
,pkg_crypto.encrypt(#email#, 'key')
)
выберите:
SELECT
"ID"
,"LOGIN"
,"PASSWORD"
,pkg_crypto.decrypt("NAME", 'key') NAME
,pkg_crypto.decrypt("EMAIL", 'key') EMAIL
FROM "USER_TABLE"
WHERE pkg_crypto.decrypt("NAME", 'key') LIKE #name# || '%'
AND pkg_crypto.decrypt("EMAIL", 'key') LIKE '%' || #email#
Я упреждаю, что сервлет хеширует пароль перед передачей в базу данных.