加密选项
加密选项¶
SeaboxSQL提供了几个不同级别的加密,并且在保护数据不会因为数据库服务偷窃、不道德的管理员、不安全网络等因素而泄漏方面提供很高的灵活性。加密可能也是保护一些诸如医疗记录或财务交易等敏感数据所要求的。
- 口令加密
- 数据库用户的口令都是以哈希(取决于password_encryption配置)的方式存储,所以管理员不能限定实际的口令赋予用户。如果 SCRAM 或者 MD5 加密算法被用于客户端认证,那么未加密的口令甚至都不可能出现在服务上,因为客户端在通过网络发送口令之前,就已经加密过。推荐使用SCRAM,因为它是互联网标准而且相比于SeaboxSQL特定的MD5认证协议更安全。
- 指定列加密
-
pgcrypto
模块允许对特定域进行加密存储。这个功能只对某些敏感数据有用。客户端提供解密的密钥,然后数据在服务端解密并发送给客户端。在数据被解密和在服务与客户端之间传递时,解密数据和解密密钥将会在服务端存在短暂的一段时间。这就给那些能完全访问数据库服务的人提供了一个短暂的截获密钥和数据的时间,例如系统管理员。
- 数据分区加密
-
存储加密可以在文件系统层面或者块层面上执行。Linux 文件系统加密选项包括 eCryptfs 和 EncFS,块层面或者全盘加密选项包括dm-crypt + LUKS。
该机制避免了在整个计算机或者驱动器被盗的情况下, 未加密的数据被从驱动器中读取。它无法防止在文件系统被挂载时的攻击,因为在挂载之后,操作系统提供数据的解密视图。不过,要想挂载该文件系统,你需要有一些方法把加密密钥传递给操作系统,并且有时候这个密钥就存储在挂载该磁盘的主机上的某处。
- 跨网络加密数据
- SSL连接加密所有跨网络发送的数据:口令、查询以及返回的数据。
sd_hba.conf
文件允许管理员指定哪些主机可以使用非加密连接(host
),以及哪些主机需要使用 SSL加密的连接(hostssl
)。客户端还可以指定它们只通过SSL连接到服务。我们还可以使用Stunnel或SSH加密传输。 - SSL 主机认证
- 客户端和主机都可以提供 SSL 证书给对方。这在两边都需要一些额外的配置, 但是这种方式提供了比仅使用口令更强的身份验证。它避免一个计算机伪装成服务,这个时长只要足够读取客户端发送的口令就行了。它还避免了“中间人”攻击,在其中有一台计算机处于客户端和服务之间并伪装成服务读取和传递两者之间的所有数据。
- 客户端加密
- 如果服务所在机器的系统管理员是不可信的,那么客户端加密数据也是必要的。在这种情况下,未加密的数据从来不会在数据库服务上出现。数据在发送给服务之前加密,而数据库结果在能使用之前必须在客户端上解密。