首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Spring外部化Postgresql列加密密钥?

如何使用Spring外部化Postgresql列加密密钥?
EN

Stack Overflow用户
提问于 2020-09-16 16:21:22
回答 1查看 2.7K关注 0票数 2

我的Postgresql实体之一有一个加密的列,当我使用Spring读取它时,我希望对它进行解密。加密实体fiels使用硬编码密码解密:

代码语言:javascript
运行
复制
@ColumnTransformer(
    read = "pgp_sym_decrypt(secretField::bytea, 'secr3t'),
    write = "pgp_sym_decrypt(?, 'secr3t')
)
private String secretField;

--我想将'secr3t‘密码具体化,这样就不再是硬编码了。但我不能做到这一点,因为:

application.properties)

  • I
  • Spring引导注释只能包含常量字符串( @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引导文档上的解密。似乎每个人都在用硬编码的钥匙做例子。

相关问题:

EN

回答 1

Stack Overflow用户

发布于 2021-04-23 14:46:37

有一个可用的答案-- here。这里的问题是它将数据存储在application.properties中。在生产系统中,这个解决方案并不是最好的解决方案,因为它将根据客户的不同而改变。

但是,您可以使用相同的结构,并以另一种方式定义您的secret.key,您可以根据特定于客户的密钥进行更改(例如从安全存储中获取)。请记住,如果您有多个客户,那么最好为每个客户设置单独的密钥。

也许将setKey()方法的可见性更改为public会很有趣,一旦在多租户环境中工作将不允许您在构造函数中定义这个键。我仍然需要测试更多这种公开的方法,因为它也会影响应用程序的职责分离。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63924238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档