【问题标题】:SQL Server: Always EncryptedSQL Server:始终加密
【发布时间】:2016-06-10 05:55:53
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql-server sql-server-2016 always-encrypted


    【解决方案1】:

    列加密密钥 (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 中,则需要 few changes 来注册 Azure Key Vault 提供程序。

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

    【讨论】:

    • 嗨乔纳森,请确保:CEK 存储在服务器上,CMK 存储在其他地方(在客户端或 Azure 中),用户应该有权访问 CMK。如果未经授权的人访问数据库或获取数据库的备份,他将无法解密加密的列,而无需访问 CMK。最后,CEK 是存储在数据库中还是服务器中?如果我们在另一个实例或机器上恢复它,我们是否必须另外恢复 CEK 或者我们会在数据库本身中找到它?再次感谢您!
    • 嗨@Geri - 是的,没错。 CEK存储在数据库中,所以在数据库恢复时会恢复。
    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 2018-03-11
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多