【发布时间】:2021-11-10 01:37:14
【问题描述】:
我已经对客户端每租户加密的实现进行了大量挖掘和研究,但对于我应该如何继续我们的应用程序感到有些困惑。对于某些背景,我们有一个dropwizard 应用程序,它有许多自定义DAO,它们使用jooq 在我们的postgres 数据库中存储信息。我们的数据库有许多表、自定义函数和自定义用户定义的数据类型。我们的要求是我们客户的一些敏感数据需要加密(数据库表中的某些列)。数据按每个租户的行进行分区。
我知道我有两个选择将数据加密放在哪里。
- 在我们的应用程序中
- 在我们的
postgres数据库中
这是我在探索上述两个选项时发现的:
虽然将加密放在我们的应用程序中是我最初的计划,但必须编辑每个 DAO 可能会导致许多问题并花费大量时间。
所以我研究了让数据库使用 pgcrypto 和列侧加密来处理加密的替代方法。但是,就像前面提到的,由于我们为列的所有自定义数据类型,我无法为这些自定义数据类型列存储任何加密数据,因为加密数据作为bytea 返回。修剪文档和其他堆栈溢出帖子除了更改这些列的数据类型以接受 bytea 与我希望尽可能避免的自定义类型之外,我无法找到解决方案。
在此之后,我有点不知道如何最好地进行下一步,因为我在这里列出的两个选项都需要大量时间,并且可能会破坏我们的很多应用程序。
我的一些其他想法:
- 我查看了
jooq或liquibase进行加密,但在那里找不到任何东西。 - 无需更新列的数据类型,只需创建一个新的加密版本的数据库并使用视图来表示表的明文。
我的大问题:鉴于这里的背景信息,是否有任何建议或替代方案来实施客户端加密? (对我们当前架构的破坏最小)
谢谢! :)
【问题讨论】:
-
在应用程序中加密比将未加密的数据发送到数据库以供
pgcrypto函数处理要安全得多。 -
是的,我在阅读后同意在数据库中执行加密的风险似乎要大得多,但目前更新我们的应用程序代码似乎不可行。
标签: java postgresql encryption jooq pgcrypto