0

网络上有很多帖子展示了这项技术的基础知识:数据在任何地方都被加密,除了客户端之外,客户端使用列加密密钥 (CEK) 来加密或解密数据。

  1. CEK 是否存储在客户端机器中?在应用程序的连接字符串中?客户(=员工)是否可以看到它?例如,我们聘请了一位新秘书,他应该有权访问敏感(和加密)数据。我们给他一台新笔记本电脑,授予他读/写权限,在他的新笔记本电脑上安装应用程序,还有什么?“告诉”他什么是 CEK?将 CEK 存储在注册表中的某个位置?

  2. 列主密钥 (CMK) 的作用是什么:创建新的 CEK 并在它们丢失的情况下恢复它们?让一个授权人掌握整个系统的钥匙?

4

1 回答 1

3

列加密密钥 (CEK) 实际上与数据一起存储在 SQL Server 中,但如果没有列主密钥 (CMK),它们就无法使用。它是客户端应用程序解密数据所需的 CMK。CMK 可以存储在客户端计算机的 Windows 证书存储中,也可以存储在 Azure Key Vault 中。

如果您在 SSMS 中使用“加密列”向导,那么它将为您生成两种类型的密钥。它会询问您要将 CMK(Windows 证书存储或 Azure Key Vault)保存在哪里,并让您选择是每个加密列都有一个 CEK,还是所有列共享一个 CEK。它还允许您重用现有的 CMK(如果有的话)。

然后,需要解密数据的应用程序需要访问 CMK(稍后会详细介绍)以及对连接字符串的以下添加:

Column Encryption Setting=Enabled;

如果需要,也可以通过编程方式更改此设置:

connStringBuilder.ColumnEncryptionSetting = SqlConnectionColumnEncryptionSetting.Enabled;

应用程序如何访问 CMK 取决于它的存储位置:

  • 如果 CMK 存储在 Windows 证书存储中,则启用 Always Encrypted 的驱动程序将自动获取它(CEK 包含使用它所需的 CMK 的详细信息)。

  • 如果 CMK 存储在 Azure Key Vault 中,则需要进行一些更改才能注册 Azure Key Vault 提供程序。

我没有使用过 Windows 证书存储区,但我猜您可以通过从现有计算机上的存储区中导出 CMK 并将其导入新计算机上的存储区来让新计算机访问加密列。

于 2016-06-10T12:43:04.623 回答