Я создал веб-приложение с базой данных MySQL, в котором хранятся данные пациентов. Согласно GDPR имена пациентов должны быть зашифрованы внутри базы данных. Для подключения и выполнения операций с БД я использую Hibernate 5.
В Интернете я нашел много информации о том, как зашифровать определенный столбец или столбцы внутри таблицы БД. В основном следующие три подхода:
- Использование
@ColumnTransformer
аннотации Hibernate , которая является наименее разрушительной для существующего кода и требует написания наименьшего количества кода
- Использование Jasypt и его интеграция Hibernate, которая более разрушительна для существующего кода и требует нескольких строк кода.
- Реализация конвертера атрибутов JPA, который требовал написания нескольких строк
Я решил использовать @ColumnTransformer
, что представляется самой простой реализацией. Если вы считаете, что один из других подходов лучше, скажите это, а также объясните причину.
Однако мой вопрос касается существующих данных. В моей базе данных уже есть незашифрованные данные, которые должны быть зашифрованы для работы с реализацией @ColumnTransformer
. Я намерен использовать следующую аннотацию:
@ColumnTransformer(
read = "pgp_sym_decrypt(lastName, 'mySecretKey')",
write = "pgp_sym_encrypt(?, 'mySecretKey')"
)
и
@ColumnTransformer(
read = "pgp_sym_decrypt(firstName, 'mySecretKey')",
write = "pgp_sym_encrypt(?, 'mySecretKey')"
)
в соответствующие столбцы.
Как мне зашифровать существующие данные, чтобы соответствовать приведенным выше аннотациям? Какой код SQL я должен использовать?