我有一个要求,需要在Postgres中以加密形式存储某些数据。显然,我需要对其进行加密、存储,并能够读取和解密它。那么,最好的方法是什么?
我有一个要求,需要在Postgres中以加密形式存储某些数据。显然,我需要对其进行加密、存储,并能够读取和解密它。那么,最好的方法是什么?
最好的方式是在客户端或应用程序服务器上进行加密,这样数据库就不知道密钥是什么,也无法解密数据。如果客户端/应用程序服务器位于不同的主机上,那就更好了。
如果您的数据库为您加密和解密数据,则易受密钥与数据库一起被盗的风险。
如果您使用pgcrypto的内置数据库加密功能,可以让应用程序将密钥与数据一起发送,这至少有些帮助。然而,如果有一个乐于助人的系统管理员开启了激进的声明日志记录或自动计划转储,仍存在密钥暴露在日志中的风险;最终,如果密钥送到数据库机器,它们比不送更容易受到攻击。控制数据库机器的攻击者还可以更改日志设置、替换postgresql二进制文件,或通过嗅探流量来捕获密钥和数据。
如果应用程序服务器和数据库位于同一台机器上并由相同的角色管理,则没有太多分离它们的必要,直接使用pgcrypto可能更明智。
无论如何,记得添加盐值!