加密所有数据的最佳实践

RMa*_*lke 7 security sql-server encryption

我在一个项目中工作,客户害怕他们自己的员工(即:客户不信任的初级 IT 人员)查询数据库以获取敏感信息。

数据库是一个新的SQL Server数据库,所以我有一些自由。

谷歌搜索了一下,我来到了 SQL Server Transparent Data Encryption,想知道这是否是我需要的,如果不是......

加密数据库中所有表中的所有列以防止用户查询数据库的最佳做法是什么?

bil*_*nkc 17

您的问题归结为访问控制。

我建议的第一个防御措施是简单地拒绝不受信任的用户的访问。如果他们无法进入数据库,他们就无法查询数据库并获取敏感数据。

如果必须允许他们访问数据库服务器,您可以查看明确授予他们对执行工作任务必须访问的表的读取权限。或者,您可以不理会他们当前的权限,而只需撤销他们查询包含敏感数据的表或这些表中的列的能力。

我开始使用这种方法的原因是加密有开销。有密钥管理以及加密/解密数据的 CPU 成本。据我了解,如果数据位于索引中,将数据作为加密数据查找也会产生性能成本,加密值将被索引而不是源值。最终结果是 2013-06-11 和 2013-06-12 可以存储在连续的磁盘位置,但是一旦它们被加密,它们就可以位于磁盘的两端,而您的简单范围查询现在表现良好吮吸后乳头。

综上所述,Steve Jones 在Encryption Primer上做了很好的介绍。我使用了其中的一些内容以及这篇关于在数据库中加密的文章,而不是在多维数据集中,来启动和运行我们的加密内容。

正如其他人在评论和其他答案中指出的那样,尽管将加密作为其名称的一部分,但 TDE 不会保护数据库本身中的数据。TDE 的目的是保护您的备份免受未经授权的访问。它与流经网络的加密数据包或自动创建 PCI 合规性无关。它只是确保如果我们的异地备份磁带丢失、被盗或只是被窥探,人们将无法在没有密钥的情况下使用它们。

我没有提到的另一个访问控制点是物理访问。如果担心初级管理员访问他们不应该访问的数据,那么除了拒绝他们访问数据库之外,不要忽视阻止他们访问机器本身的基本知识——无论是通过远程桌面还是物理登录机器。一旦他们能够开始使用,就没有什么可以阻止他们将 SQL Server 重新启动到单用户模式并删除您的访问控制。

  • 根据我的经验,数据库服务器通常有大量未使用的 CPU,因此为了加密而牺牲更多 CPU 活动是可以接受的。然而,最重要的一点是,在下面的帖子中重复,*TDE 只保护硬盘上静止的数据*。它对正常的数据库操作是透明的。您的问题的正确答案是“访问控制”和“只雇用您信任的人”。 (4认同)
  • @GreenstoneWalker 同意所有观点。不过,我们必须开始考虑的一件事是 SQL Server 的 CPU 使用率,从 2012 年开始,它具有每个核心许可,因此它负责的 CPU 密集型活动越多,成本就越高。 (3认同)

Rem*_*anu 11

使用加密保护数据免受您自己的管理员/IT 人员攻击的唯一方法是用户每次查询数据时自己输入解密密码。如果您的应用程序向用户显示一个密码对话框,然后发出一个OPEN SYMMETRIC KEY ... DECRYPTION BY CERTIFICATE ... WTIHT PASSWORD ...(或一些等效的)来打开数据加密密钥,那么并且只有这样数据才会受到加密保护以防止未经授权的访问:即使有人访问了数据,它不知道解密密钥,也不能从服务器上的某个地方检索密钥。

所有其他方案(包括 TDE)都涉及后端引擎要打开的密钥层次结构,这意味着密钥存储在以DPAPI 为根的层次结构中的某处。在所有这些情况下,您只有数据访问控制保护 (GRANT/DENY/REVOKE),而不是加密保护,因为 SQL Server 本身可以访问解密密钥,它会为您解密数据。这些方案防止媒体丢失,而不是防止访问。它们非常有价值,并且被广泛部署。

现在回到第一段,您必须了解警告:

  • 没有秘密可以针对授权管理员隐藏在系统上。门槛可以提高,但如果管理员愿意,他总是可以获取秘密。
  • 使用列级加密会使数据无法搜索。加密所有表中的所有列将使数据无法查询,这是肯定的......我的意思是任何人都无法查询,包括授权用户
  • 让应用程序在每次访问时都要求最终用户提供解密密码是不太可行的

在这三者之间,像您尝试的那样部署加密几乎没有什么好处。真正令人困惑的是其他人所说的:访问控制和信任。请记住,审计是可用的,可以起到威慑作用。


Tom*_*Tom 6

这完全不是您所需要的。

假设服务器保持在线状态,它无济于事,因为它是透明的——初级管理员“查询数据库”必须能够连接并发出 sql 语句(只要数据库服务器运行,文件访问就会被阻止)——这意味着加密不会“工作”。

透明加密有助于某人走出(窃取)带有数据文件的光盘;)

让不受信任的初级 IT 人员远离 IT - 就这么简单。或者至少在数据库之外(没有访问权限,他们不知道密码)。