SQL 始终加密 CMK 证书存储最佳实践

SQL Always encrypted CMK certificate storage best practice

我正在推出 SQL Always Encrypted 到我们的数据库,并想了解存储 CMK 证书的最佳实践方法。

我们在 Windows server 2016 box 上托管了 .Net 网络应用程序,每个应用程序都有一个不同的 AD 服务帐户 (SA) 分配为其应用程序池 ID。我们在单独的服务器上有一个 SQL 服务器实例。这种方法允许我们隔离和限制每个应用程序对数据库的访问,并且运行良好。

我不想将 CMK 证书导入到本地机器 Windows 证书存储,因为这意味着服务器上的所有用户,主要是服务器管理员,都可以访问证书和因此能够解密数据库中的数据。

我目前已经以 SA 身份登录到服务器并在本地用户下安装了证书。这是我能想到的最安全的选择,因为只有 SA 才能解密信息,这反过来意味着只有应用程序才能解密数据,而其他用户不能。然而,我使用这种方法面临的问题是 SA 似乎需要一直登录到服务器,这不是一个可行的长期解决方案(如果服务器重新启动,该帐户将被注销并且我的应用程序将失败)

有没有人找到任何关于安全存储 CMK 的最佳位置的官方 Microsoft 指南?

非常感谢

我建议使用 Azure Key Vault 作为您的 Keystore Provider(Centralized Key Stores),这将是存储密钥的最安全方式。

Selecting a Key Store for Column Master Key

据此,

Centralized Key Stores - serve applications on multiple computers. An example of a centralized key store is Azure Key Vault. A centralized key store usually makes key management easier because you don't need to maintain multiple copies of your column master keys on multiple machines. You need to ensure that your applications are configured to connect to the centralized key store

去中心化密钥库

您可以轻松manage the users/Application通过 Azure Key Vault 中的访问策略。

Reference