5

我正在使用 pgcrypto 加密基础的某些列的 postgresql 基础。

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)")

编辑

我尝试了两件事:

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注释中使用它。

您同意我的观点还是有其他解决方案?

4

0 回答 0