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