我的Postgresql实体之一有一个加密的列,当我使用Spring读取它时,我希望对它进行解密。加密实体fiels使用硬编码密码解密:
@ColumnTransformer(
    read = "pgp_sym_decrypt(secretField::bytea, 'secr3t'),
    write = "pgp_sym_decrypt(?, 'secr3t')
)
private String secretField;--我想将'secr3t‘密码具体化,这样就不再是硬编码了。但我不能做到这一点,因为:
application.properties)
@Value("${encrypt.key}")不可能从read = "pgp_sym_decrypt(secretField::bytea, current_setting('encrypt.key'))中读取它),但它告诉我即使我在application.properties中声明encrypt.key,也可以用read = "pgp_sym_decrypt(secretField::bytea, current_setting('encrypt.key'))编写current_setting('encrypt.key')行。我读到这个参数应该写在服务器端的postgresql.conf配置文件中,但是在客户端不使用密码感到很奇怪。有没有一种方法可以使用Spring解密Postgresql列而不对密码进行硬编码?我真的以为在application.properties中会有一行我可以写,因为客户端的键是可能的,它只是.硬编码的JPA常量限制。
我发现的任何内容都没有提到Spring在https://www.postgresql.org/docs/8.3/pgcrypto.html或spring引导文档上的解密。似乎每个人都在用硬编码的钥匙做例子。
相关问题:
发布于 2021-04-23 14:46:37
有一个可用的答案-- here。这里的问题是它将数据存储在application.properties中。在生产系统中,这个解决方案并不是最好的解决方案,因为它将根据客户的不同而改变。
但是,您可以使用相同的结构,并以另一种方式定义您的secret.key,您可以根据特定于客户的密钥进行更改(例如从安全存储中获取)。请记住,如果您有多个客户,那么最好为每个客户设置单独的密钥。
也许将setKey()方法的可见性更改为public会很有趣,一旦在多租户环境中工作将不允许您在构造函数中定义这个键。我仍然需要测试更多这种公开的方法,因为它也会影响应用程序的职责分离。
https://stackoverflow.com/questions/63924238
复制相似问题