【发布时间】:2017-06-28 11:05:18
【问题描述】:
我正在使用始终使用 KeyVault 加密的 SQL azure 数据库进行加密。 我在 Keyvault 中看到的是,CMK 是在 Keys 部分中创建的。 是否可以从中构造证书? 或者我在哪里可以找到这个 CMK 证书?
【问题讨论】:
标签: azure azure-sql-database azure-keyvault always-encrypted
我正在使用始终使用 KeyVault 加密的 SQL azure 数据库进行加密。 我在 Keyvault 中看到的是,CMK 是在 Keys 部分中创建的。 是否可以从中构造证书? 或者我在哪里可以找到这个 CMK 证书?
【问题讨论】:
标签: azure azure-sql-database azure-keyvault always-encrypted
在 Azure Key Vault 中,您可以创建不同类型的对象:密钥、机密和证书。 Always Encrypted 要求存储在 Azure Key Vault 中的列主密钥是 Key Vault 密钥。当你选择将新列主密钥存储在 Key Vault 中时,SSMS 会创建一个 Key Vault 密钥。顺便说一句,SSMS 在创建密钥时所做的相当于调用 Add-AzureKeyVaultKey。
话虽如此,当创建 Key Vault 证书时(例如,通过 Add-AzureKeyVaultCertificate),还会创建具有相同名称的可寻址密钥和机密 - 请参阅 https://docs.microsoft.com/en-us/rest/api/keyvault/about-keys--secrets-and-certificates#key-vault-certificates。而且,如果需要,您可以使用与证书关联的密钥作为列主密钥。但是,我不知道这样做的实际好处:启用 Always Encrypted 的客户端驱动程序(例如 ADO.NET)甚至不会知道密钥与证书相关联。
如果您能描述您的业务需求并解释您认为需要列主密钥作为证书的原因,这可能会很有用。
请记住,即使列主密钥是存储在 Windows 证书存储(而不是密钥库)中的真实证书,启用 Always Encrypted 的驱动程序也仅使用证书中包含的公钥和私钥,他们忽略了其他一切。特别是,驱动程序从不验证证书到期日期、CA 链或证书是否已被吊销。这是设计使然 - 主密钥保护长期存在的数据,这种方法可确保您始终能够访问数据,只要您拥有主密钥(例如,如果您创建包含加密数据的数据库备份文件并恢复几年后,您应该能够访问您的数据)。
【讨论】: