一、什么是安全?
“安全”一词是一个非常广泛的概念,可以指完全不同的程序和实现方法。了解安全对您的应用程序意味着什么非常重要,因此您可以执行适当的安全实践和程序来确保您公司资产的安全。数据泄露通常会导致经济损失、声誉受损、消费者信心瓦解、品牌侵蚀以及不遵守政府和行业法规。
因此,PostgreSQL 等基础设施软件的安全性更为重要,因为任何数据泄露都可能对全国或全市产生影响,而这些影响通常很难完全恢复。
二、常见的数据库妥协
用户妥协:
- 过多的权限
- 特权滥用
- 弱用户认证
- 密码强度低
- 默认权限太开放
数据妥协:
- 不受管理和不受保护的敏感数据
- 备份数据暴露
- 被盗硬盘
- 非托管加密密钥
网络妥协:
- 防火墙规则
- 深度包检测 (DPS)
- 漏洞预防
- 拒绝服务 (DOS) 攻击
漏洞:
- 软件错误
- 缓冲区溢出
- SQL注入
- 特权升级
三、大局
这张图展示了围绕 PostgreSQL 服务器的不同类型的“安全”,这里大概涉及 5 种类型的安全概念:
3.1 数据安全(通过网络)
这就是 PostgreSQL 客户端和服务器之间通信的安全性,我们几乎总是希望使用 TLS 来加密生产环境中的数据通信。TLS 保证客户端和服务器之间的相互信任,因此每一方都确保它正在与正确的实体而不是流氓服务器进行通信。当 TLS 未完全设置时,SSH 隧道也是保护 psql 连接的常用选项。SSH 隧道也非常安全,因为每个连接都会强制客户端和服务器生成并同意仅对该会话有效的加密密钥。此外,通过在客户端和服务器之间设置公钥和私钥对来确保两个实体的真实性,可以使 SSH 隧道更加安全。
3.2 数据安全
这是 PostgreSQL 与其写入数据的磁盘之间的安全性。这种安全类型通常被称为“集群数据加密”或“透明数据加密”。当前版本的 PostgreSQL 不支持此功能,但目前有少数人才在开发此功能。这种安全性旨在防止直接在硬盘上进行的数据泄露。通过加密磁盘上的数据,硬盘盗窃者将无法从硬盘中提取有用的信息。
3.3 网络安全
这是最有可能涉及连接客户端和服务器之间的防火墙的安全性。防火墙的目的是阻止来自公共网络的大部分恶意连接并防止对服务器的未授权访问。大多数高级防火墙(例如 IPS)可以根据已知恶意数据包和攻击的数据库阻止 DOS 攻击并执行深度数据包检查。还有一些防火墙,例如 IDS,它们只执行网络监控,如果检测到攻击企图,就会向操作员发出警报。
3.4 漏洞
这种安全性主要是由软件漏洞引起的,该漏洞允许攻击者利用服务器、窃取数据或简单地停止服务器并造成损坏。防止这种情况的最佳方法是将您的 PostgreSQL 服务器升级到已解决大多数已知漏洞的最新版本。
3.5 用户安全
这是主要与用户管理相关的安全性,有时称为基于角色的访问控制 (RBAC)。这是数据库管理员管理每个数据库用户并为正确的用户设置正确权限的地方。如果操作不当,过多的权限、弱密码和权限滥用是很常见的。确保正确的用户获得正确的权限并使用第三方身份验证服务器(例如 LDAP 或 Kerberos)代替简单的密码可以显着提高数据库基础架构的安全等级。