PostgreSQL数据库加密选项

参考翻译自https://www.postgresql.org/docs/12/encryption-options.html

18.8. 加密选项

PostgreSQL提供了多个级别的加密,并提供了灵活性,可以防止由于数据库服务器盗窃,不道德的管理员和不安全的网络而导致数据泄露。还可能用加密来保护敏感数据,例如病历或财务交易。

密码加密

数据库中的用户密码以哈希值的方式储存(由设置password_encryption选项决定), 因此管理员无法确定分配给用户的实际密码. 如果将SCRAM或MD5加密用于客户端身份验证, 未加密的密码永远不会临时出现在服务器上,因为客户端会在通过网络发送之前对其进行加密. 推荐用SCRAM, 因为它是Internet标准,并且比PostgreSQL特定的MD5身份验证协议更安全。

特定列的加密

pgcrypto模块允许某些字段被加密存储。如果只有一些数据是敏感的,这将很有用。客户端提供解密密钥,数据在服务器上解密,然后发送到客户端。

解密的数据和解密密钥会在客户端和服务器之间进行解密和通信时,短暂地出现在服务器上。这在这短暂的时刻数据和密钥可以被某个拥有对数据服务器完全访问权的人截获,比如系统的管理员。

数据分区加密

可以在文件系统级别或块级别执行存储加密。Linux文件系统加密选项包括eCryptfs和EncFS,而FreeBSD使用PEFS。块级或全盘加密选项包括Linux上的dm-crypt + LUKS和FreeBSD上的GEOM模块geli和gbde。许多其他操作系统也支持此功能,包括Windows。

如果驱动器或整个计算机被盗,此机制可防止从驱动器中读取未加密的数据。这在文件系统挂载时无法防止攻击,因为在文件系统挂载时,操作系统会提供未加密的数据视图。但是,要挂载文件系统,您需要某种方式将加密密钥传递给操作系统,有时密钥会存储在挂载磁盘的主机上的某个位置。

网络数据加密

SSL连接会加密通过网络发送的所有数据:密码,查询和返回的数据。pg_hba.conf文件允许管理员指定哪些主机可以使用非加密连接(host),哪些主机需要SSL加密的连接(hostssl)。此外,客户端可以指定仅通过SSL连接到服务器。

GSSAPI加密的连接对通过网络发送的所有数据进行加密,包括查询和返回的数据。(没有密码通过网络发送。)pg_hba.conf文件允许管理员指定哪些主机可以使用非加密连接(host),哪些主机需要GSSAPI加密的连接(hostgssenc)。此外,客户端可以指定仅通过GSSAPI加密的连接连接到服务器(gssencmode = require)。

Stunnel或SSH也可以用于加密传输。

SSL主机认证

客户端和服务器都可以相互提供SSL证书。它需要在每一侧进行一些额外的配置,但是与仅使用密码相比,它提供了更强大的身份验证。它可以防止计算机假装成为服务器的时间足够长,所以无法读取客户端发送的密码。它还有助于防止“中间人”攻击,即客户端和服务器之间的计算机冒充服务器,并在客户端和服务器之间读取和传递所有数据。

客户端加密

如果无法信任服务器计算机的系统管理员,则客户端必须对数据进行加密;这样,未加密的数据就永远不会出现在数据库服务器上。数据在发送到服务器之前先在客户端上加密,并且数据库结果在使用前必须在客户端上解密。

你可能感兴趣的:(postgresql加密解密)