Sql-Server

如何在新數據庫上恢復對稱密鑰?

  • December 29, 2016

我在另一個數據庫上恢復對稱密鑰時遇到問題。我在第一個(舊)數據庫中有一個帶有加密列的表。(該表包含加密數據)舊數據庫中的密鑰是用下一個 sql 腳本創建的:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TESTPSWD'
GO
CREATE CERTIFICATE [CertificateSecurity] WITH SUBJECT = 'Key Protection';
GO
CREATE SYMMETRIC KEY [EncryptKey] WITH
   ALGORITHM = AES_256 
   ENCRYPTION BY CERTIFICATE [CertificateSecurity]
GO

現在我必須將這個包含所有數據的表移動到新數據庫中。我使用舊數據庫中的數據導入表。還有一個問題:有沒有什麼方法可以在不指定key_source和identity_value的情況下在新數據庫中創建相同的加密密鑰?(因為我沒有它)我嘗試使用與上面相同的 sql 查詢來創建它,但在這種情況下解密返回 NULL。

PS我知道我可以解密數據然後重新創建密鑰(提供所有參數)並使用新密鑰加密數據。但是找到另一個解決方案會很棒。

SQL Server 中沒有內置解決方案。在沒有指定來源和身份的情況下創建的對稱密鑰永遠不能被編寫或複制。

這意味著,在您的情況下,您必須在複製數據時即時解密和重新加密。

您還可以在目前數據庫中創建一個新密鑰(指定來源和身份)並在本地解密和新密鑰重新加密。然後您可以移動加密數據並在新位置重新創建密鑰,因為您擁有可用於該新密鑰的所有重要種子數據。

引用自:https://dba.stackexchange.com/questions/65531