Я работаю на базе postgresql, которая использует pgcrypto для шифрования некоторых столбцов базы.
На стороне Java, я использую JPA для "сопоставления" моих классов с моей базой данных.
В настоящее время для шифрования и дешифрования полей в Java я использую @ColumnTransformer
. Пример:
@Column(name = "my_column", nullable = false)
@ColumnTransformer(read = "pgp_sym_decrypt(my_column, "my_password")", write = "pgp_sym_encrypt(?, "my_password")")
private String myColumn;
Это отлично работает. Но я хотел бы изменить свой пароль. Мое приложение будет развернуто на нескольких серверах, и пароль будет отличаться для каждого.
Я много чего пробовал, искал в интернете, но ничего не нашел.
Итак, я начинаю думать ... возможно ли это с этой аннотацией? Или я должен зашифровать / расшифровать по-другому? В хранилище может быть?
PS вот несколько примеров того, что я пробовал:
@ColumnTransformer(read = "pgp_sym_decrypt(my_column, ${application.security.pgcryptoPassword})", write = "pgp_sym_encrypt(?, ${application.security.pgcryptoPassword})")
с application.security.pgcryptoPassword, определенным в моем файле конфигурации
@Value("${application.security.pgcryptoPassword}")
private static final String pgcryptoPassword;
private static final String readCreator = "pgp_sym_decrypt(creation_aladdin_par, " + pgcryptoPassword + ")";
@ColumnTransformer(read = readCreator, write = "pgp_sym_encrypt(?, my_password)")
EDIT
Я попробовал 2 вещи:
private static final String pgcryptoPassword = "my_password";
@ColumnTransformer(read = "pgp_sym_decrypt(my_column, '" + pgcryptoPassword + "')", write = "pgp_sym_encrypt(?, '" + pgcryptoPassword + "')")
private String myColumn;
и
@Value("${application.security.pgcryptoPassword}")
private static final String pgcryptoPassword;
@ColumnTransformer(read = "pgp_sym_decrypt(my_column, '" + pgcryptoPassword + "')", write = "pgp_sym_encrypt(?, '" + pgcryptoPassword + "')")
private String myColumn;
Первый работает, второй я получаю ошибку:
The value for annotation attribute ColumnTransformer.read must be a constant expression
Из того, что я нашел в интернете об этой ошибке, я думаю, что нет способа изменить пароль в файле конфигурации и использовать его в аннотации @ColumnTransformer
.
Согласны ли вы со мной или у вас есть другое решение?