我熟悉 SQL Server 的数据库加密选项,例如 TDE,并确保备份/备份位置得到正确加密和保护。
我正在为一个新客户做一些工作,他要求我详细说明端到端加密的选项,换句话说,以确保从数据库服务器发送到应用程序服务器的数据在途中保持加密并且不能被拦截(或者更确切地说,解释) 通过任何类型的数据包监控。
我知道使用 SSL 证书来加密与数据库的连接,尽管这是我很少配置的。I really don't know if that is an adequate option for end to end encryption as surely this cannot be configured using SQL Server alone?
在我看来,应用程序端或网络路由上必须有一些东西可以实现这样的端到端加密?
我对网络安全的了解基本上仅限于防火墙规则和一般路由,因此我正在寻找可供我进一步研究或付诸实践的选项。
我担心这个问题将被关闭,因为它是基于意见的,所以我真的要求在 SQL Server 本身(或在 DBA 的职权范围内)提供可靠的选项来配置数据的端到端加密。
SQL Server 中的 Always Encrypted 功能,这是一种客户端加密技术,旨在提供端到端加密,这意味着它将加密客户端应用程序驱动程序中的数据。这意味着数据将在客户端和 SQL Server 之间的网络上加密,在 SQL Server 的内存中加密,在磁盘上加密。如果实施正确,它还可以保护数据免受在 SQL 服务器计算机上获得管理员权限的入侵者(如果您的数据在云中,则为云管理员)
粗略地说,Always Encrypted 提供以下安全保证,纯文本数据将仅对有权访问 ColumnMasterKey(证书/AKV 密钥/基于 HSM 的密钥等)的实体可见
为了详细说明,请考虑以下场景。
考虑两台机器:
考虑两个用户
UserA(这在技术上可以是一组用户,但为了简单起见,我将考虑使用单个用户的场景):谁是MachineA上的管理员,管理 SQL Server,并且是 SQL Server 上的 SysAdmin。但是,userA对MachineT没有任何类型的访问权限,并且UserA不应该能够解密存储在机器 A 上的 SQL Server 中的任何加密数据(加密数据,在此答案的上下文中是使用的 Always Encrypted 功能加密的数据SQL 服务器)。
UserT(这在技术上可以是一组用户,但为了简单起见,我将考虑使用单个用户的场景):是受信任的用户,可以访问MachineT ,可以访问托管在 SQL Server 上的数据库db中的所有数据机器A。此外,由于用户 T是受信任的,他/她应该能够解密加密数据。
考虑在MachineA上运行的 SQL Server具有数据库 db和表 t。
我们的目标是保护属于表t的列,例如ssnCol,这样只有userT应该能够以明文形式看到ssnCol。
可以使用以下步骤来实现上述目标。
Encrypt columns (configure Always Encrypted)
当userT以上述方式 加密ssnCol时,会生成两个密钥
因此,为了解密ssnCol,需要 CEK,然而,为了解密 CEK,需要 CMK。
由于 CMK 在 machineT 的 Windows 证书存储中,因此只有userT可以访问 CMK、解密 CEK 和解密ssnCol。
userA是machineA上的管理员,也是 SQL Server 上的 SysAdmin,但由于他/她无权访问 CMK,因此userA无法以明文形式访问ssnCol。您可以通过使用MachineA中的 SSMS 、以userA身份登录并查询ssnCol来验证这一点
如果您还有其他问题,请在评论部分提出,我可以回答。
你是对的; SSL 是支持动态数据加密的官方手段。
Always Encrypted 更深一些。它在传输之前在客户端应用程序中加密数据,并且从不以任何未加密的方式存储它。因此,通过 Always Encrypted 加密的数据在传输和静止时是“安全的”(存储为加密数据),但数据包本身并未在网络级别加密。(微软文档)
因此,如果您想阻止您的 DBA 和/或报告编写者查看明文数据(例如信用卡号或社会保险号),那么 Always Encrypted 是获得该级别安全性的可能工具。
但是,如果您不想让数据包监控工具看到您的数据库用户名和密码,或者在从 DB 移动到应用程序时看到明文数据,那么您必须使用 SSL。
TDE(从 2008 年开始)是静态加密,这意味着无论谁试图在没有适当安全管理的情况下在其他地方恢复您的数据库,都是不可能的。尽管您仍然可以使用 3rd 方工具嗅探动态数据,但这是使用SSL 安全性或IPSEC解决的另一个安全问题。
引入 SQL 2016,启用了Always Encrypted,这是您可能需要考虑的。它基本上加密静态和动态数据。