关系型数据库加密通过使用加密算法将敏感数据转换为不可读的密文来保护数据。此过程确保即使未经授权的用户访问数据库文件或备份,如果没有正确的解密密钥,他们也无法解释数据。加密可以在不同级别应用:整个数据库、特定表、列或单个字段。选择取决于安全要求和性能权衡。例如,加密“credit_card”列可确保卡号安全,同时保留产品描述等非敏感数据不加密,以保持查询效率。
主要有两种加密方法:应用级别和数据库级别。在应用级别加密中,数据在发送到数据库之前被加密,这使得开发人员可以完全控制算法和密钥。例如,支付服务可能在其代码中使用 AES-256 来加密客户的社会安全号码,然后再存储。数据库级别加密,例如透明数据加密 (TDE),由数据库引擎本身处理。TDE 自动加密静态数据(例如,磁盘上的数据),无需更改应用程序。虽然方便,但 TDE 并不能抵御攻击者通过有效凭据获得直接数据库访问权的攻击,因为数据库会自动为授权用户解密数据。一些系统还支持列特定加密,允许精细控制——例如在 SQL Server 中使用 ENCRYPTBYKEY()
函数加密“password”列。
密钥管理至关重要。加密密钥必须与其保护的数据分开存储,通常使用专用的密钥管理服务 (KMS) 或硬件安全模块 (HSM)。例如,AWS RDS 集成 AWS KMS 来管理 TDE 的密钥。访问控制(例如,数据库角色)决定谁可以解密数据,确保只有授权的应用程序或用户拥有密钥访问权限。一个常见的陷阱是忽视密钥轮换或备份策略,如果密钥受到威胁,可能导致数据丢失。虽然加密会增加开销——例如加密列的查询速度变慢——但它是一个基础层,与其他安全措施(如网络加密(用于传输中的数据使用 TLS))和基于角色的访问控制协同工作。