网络上有很多帖子展示了这项技术的基础知识: 除了客户端之外,数据在任何地方都是加密的 列加密密钥(CEK)用于由客户端加密或解密数据。
CEK存储在客户端机器中?在应用程序的连接字符串中?客户(=员工)可以看到吗?例如,我们雇用一名新秘书,他应该可以访问敏感(和加密)数据。我们给他一台新的笔记本电脑,授予他读/写权限,在他的新笔记本电脑上安装应用程序,还有什么? "命理"他是什么CEK?将CEK存储在注册表中的某个位置?
列主密钥(CMK)的作用是什么:创建新的CEK并在丢失的情况下恢复它们?只允许一个授权人持有整个系统的密钥?
答案 0 :(得分:3)
列加密密钥(CEK)实际上与数据一起存储在SQL Server中,但如果没有列主密钥(CMK),则不能使用它们。它是客户端应用程序解密数据所需的CMK。 CMK可以存储在客户端计算机的Windows证书存储区中,也可以存储在Azure密钥保管库中。
如果您在SSMS中使用“加密列”向导,那么它将为您生成两种类型的密钥。它将询问您希望保留CMK(Windows证书存储区或Azure密钥保管库)的位置,并允许您选择是为每个加密列设置一个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并将其导入到新的商店中来授予新计算机访问加密列的权限。之一。