18.8. 加密选项

PostgreSQL 提供了多个级别的加密,并提供了灵 Active,可以防止由于数据库服务器被盗,不道德的 Management 员和不安全的网络而导致数据泄露。还可能需要加密以保护敏感数据,例如病历或财务 Transaction。

  • Password Encryption

    • 数据库用户密码存储为散列(由设置password_encryption确定),因此 Management 员无法确定分配给用户的实际密码。如果将 SCRAM 或 MD5 加密用于 Client 端身份验证,则未加密的密码永远不会临时出现在服务器上,因为 Client 端会在通过网络发送该密码之前对其进行加密。首选 SCRAM,因为它是 Internet 标准,并且比 PostgreSQL 特定的 MD5 身份验证协议更安全。
  • 特定列的加密

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

在 Client 端和服务器之间进行解密和通信时,解密后的数据和解密密钥会短暂地出现在服务器上。这是一个简短的 Moment,其中可以完全控制数据库服务器的人(例如系统 Management 员)截取数据和密钥。

  • 数据分区加密

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

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

  • 跨网络加密数据

    • SSL 连接对通过网络发送的所有数据进行加密:密码,查询和返回的数据。 pg_hba.conf文件允许 Management 员指定哪些主机可以使用未加密的连接(host),哪些需要 SSL 加密的连接(hostssl)。此外,Client 端可以指定仅通过 SSL 连接到服务器。 Stunnel 或 SSH 也可以用于加密传输。
  • SSL 主机认证

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

    • 如果不能信任服务器计算机的系统 Management 员,则 Client 端需要对数据进行加密;这样,未加密的数据永远不会出现在数据库服务器上。数据在发送到服务器之前先在 Client 端上加密,并且数据库结果必须在 Client 端上解密后才能使用。