PostgreSQL数据库加密选项

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

18.8. 加密选项

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

密码加密

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

特定列的加密

pgcrypto模块容许某些字段被加密存储。若是只有一些数据是敏感的,这将颇有用。客户端提供解密密钥,数据在服务器上解密,而后发送到客户端。安全

解密的数据和解密密钥会在客户端和服务器之间进行解密和通讯时,短暂地出如今服务器上。这在这短暂的时刻数据和密钥能够被某个拥有对数据服务器彻底访问权的人截获,好比系统的管理员。服务器

数据分区加密

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

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

网络数据加密

SSL链接会加密经过网络发送的全部数据:密码,查询和返回的数据。pg_hba.conf文件容许管理员指定哪些主机可使用非加密链接(host),哪些主机须要SSL加密的链接(hostssl)。此外,客户端能够指定仅经过SSL链接到服务器。ui

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

Stunnel或SSH也能够用于加密传输。操作系统

SSL主机认证

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

客户端加密

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