Sql-Server-2016
我們如何在環境之間恢復配置了 Always Encrypted 的數據庫並使 Web 應用程序能夠加密/解密數據?
我在生產環境中有一個使用 AE 配置的 SQL Server 2016 數據庫。列主密鑰證書在數據庫伺服器以外的不同伺服器中可用(在 Windows 證書儲存 -> 本地電腦位置下),並且託管 ASP.NET 應用程序的 Web 伺服器也具有加密/解密數據的證書。
出於故障排除或運營支持目的,我們通常會根據需要將此生產數據庫備份並還原到我們的登台/UAT 環境中。
還原數據庫後,Web 應用程序無法按預期工作,因為它缺少用於在生產環境中配置 AE 的證書。
根據安全策略,客戶端不願意將 AE 證書從 Windows 證書儲存區帶到目標環境。
在這方面,當我們將數據庫從一個環境恢復到另一個環境時,要遵循哪些最佳實踐來使 Web 應用程序正常工作?或者是否有任何其他方法可以在不攜帶證書的情況下使 Web 應用程序正常工作?
請參閱有關Always Encrypted如何工作的說明。基本上,SQL Server 無法訪問將數據解密為純文字所需的密鑰。這項工作由客戶端驅動程序執行,在您的方案中,客戶端驅動程序將尋找證書來解密 Web 應用程序的數據,但如果找不到正確的證書,則不會解密數據。
這本身不會導致失敗,正如您從這個範例中看到的那樣,如果您沒有在驅動程序中啟用列加密支持,您仍然可以獲得結果,但是當該數據未解密時,客戶端驅動程序只會返回加密的二進制值。
但是,您的 Web 應用程序可能依賴未加密的數據來做更多的事情,而不僅僅是呈現結果集,為此,您將需要證書。如果客戶端拒絕允許在較低環境中共享證書,則您不能在非生產環境中使用從生產中恢復的數據庫副本。