Можно ли изменить пароль в Hibernate @ColumnTransformer для pgcrypto? - PullRequest
0 голосов
/ 29 августа 2018

Я работаю на базе 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.

Согласны ли вы со мной или у вас есть другое решение?

...