8

我需要加密 PostgreSQL 9.6 数据库中的一些列。被加密的数据本质上是敏感的;但是,这些数据不是密码或其他身份验证凭据。这些数据需要解密以供用户进行统计分析和消费。

在阅读了几个问题和答案后:

...并考虑这些评论:

在此处输入图像描述

...似乎使用 pgcrypto 模块的最大问题是在同一个数据库中存储密钥。

这就引出了一个问题:

将密钥存储在不同的数据库中并通过外部数据包装器(例如 Postgresql_FDW)访问它是否符合最佳实践?

4

1 回答 1

3

使用加密机制时,秘密存储是一个常见问题。

pgcrypto 不提供密钥存储,您可以自由地将密钥存储在您想要的位置并尽可能保护它。

如果由同一个 DBA 管理,将密钥存储在另一个数据库中不会提供太多安全性,因为 DBA 可能会以相同的方式访问它。

理想情况下,您会将密钥存储在一个安全的保险库中,并从您的应用程序中请求它以构建查询。当请求运行时,它仍然对 DBA 可见select * from pg_stat_activity

您可以设置用于 SQL 会话范围的密钥,set session my.vars.cryptokey = 'secret';然后使用以下语法将其用于您的查询:current_setting('my.vars.cryptokey')::text

从应用程序的角度来看,为了(几乎)透明,PostgreSQL 规则可能有助于转换secure_column为使用会话存储密钥的解密函数的调用。对于插入,需要一个预插入触发器。

于 2018-01-10T13:11:56.887 回答