我在生产环境中有一个使用 AE 配置的 SQL Server 2016 数据库。列主密钥证书在数据库服务器以外的不同服务器中可用(在 Windows 证书存储 -> 本地计算机位置下),并且托管 ASP.NET 应用程序的 Web 服务器也具有加密/解密数据的证书。
出于故障排除或运营支持目的,我们通常会根据需要将此生产数据库备份并还原到我们的登台/UAT 环境中。
还原数据库后,Web 应用程序无法按预期工作,因为它缺少用于在生产环境中配置 AE 的证书。
根据安全策略,客户端不愿意将 AE 证书从 Windows 证书存储区带到目标环境。
在这方面,当我们将数据库从一个环境恢复到另一个环境时,要遵循哪些最佳实践来使 Web 应用程序正常工作?或者是否有任何其他方法可以在不携带证书的情况下使 Web 应用程序正常工作?
请参阅有关Always Encrypted如何工作的说明。基本上,SQL Server 无法访问将数据解密为纯文本所需的密钥。这项工作由客户端驱动程序执行,在您的方案中,客户端驱动程序将寻找证书来解密 Web 应用程序的数据,但如果找不到正确的证书,则不会解密数据。
这本身不会导致失败,正如您从这个示例中看到的那样,如果您没有在驱动程序中启用列加密支持,您仍然可以获得结果,但是当该数据未解密时,客户端驱动程序只会返回加密的二进制值。
但是,您的 Web 应用程序可能依赖未加密的数据来做更多的事情,而不仅仅是呈现结果集,为此,您将需要证书。如果客户端拒绝允许在较低环境中共享证书,则您不能在非生产环境中使用从生产中恢复的数据库副本。