簡體   English   中英

使用目標 SMK 不同的加密列還原數據庫

[英]Restoring database with encrypted columns where destination SMK is different

之前有人問過類似的問題,但我相信情況略有不同,我也想了解任何替代解決方案。 我現在正處於信息過載階段:\

SERVER A 上數據庫的某些列已使用此方法加密:

-- Key creation
USE [master];
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'ComplexPasswordHere';
CREATE CERTIFICATE MyDbCertificate01 WITH SUBJECT = 'MyDatabase Certificate 01';
CREATE SYMMETRIC KEY SSN_Key_01 WITH ALGORITHM = TRIPLE_DES ENCRYPTION BY CERTIFICATE MyDbCertificate01;

-- Decryption example
USE [MyDB];
GO
OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE MyDbCertificate01;
SELECT
  CONVERT(nvarchar(50), DECRYPTBYKEY(PasswordEnc)) AS [Password]
FROM
  [tbl_Users]
CLOSE SYMMETRIC KEY SSN_Key_01;

該數據庫需要恢復到服務器 B 上,該服務器已經有一個服務主密鑰,用於管理該服務器上其他數據庫的加密。

根據研究,其他作者表示我們可以使用FORCE備份/恢復 SMK,但我認為這會破壞目標服務器上的現有加密:

問題就在這里:當前機器的 DMK 不能用於使用另一個 SMK 加密的數據。 它將無法解密,因為 SMK 已更改。 資源

假設以上仍然准確,是否可以備份數據庫以及可能的證書,以使目標服務器能夠成功解密數據?

有沒有其他方法可以在不損壞目標服務器現有數據的情況下實現這一目標?

因此,隨着壓力的增加,我決定拿出我的錢包並設置一個新的 Azure VM 測試服務器,以保證全新的設置。

解決方案如下(盡可能提供鏈接)。

1. 在不同的服務器上恢復/克隆數據庫

使用此處的說明(SSMS 還原對話框,覆蓋必要的字段)還原數據庫。 此時,加密的數據庫字段還無法解密

2.恢復數據庫主密鑰

一旦恢復,事實證明dba.stackexchange 上的這個答案就是所需要的(修改以適合我的問題)。

USE [MyRestoredDatabase]
GO
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'ComplexPasswordHere'; -- This is the password used for --> CREATE MASTER KEY ENCRYPTION BY PASSWORD '....';
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY;
GO

從那時起, DECRYPTBYKEY()和其他加密工作正常。

如果我下面的假設不正確,請發表一個答案來澄清我錯在哪里,我會接受你的答案......

根據我對新 VM 的研究,似乎在備份數據庫時,證書和對稱密鑰會作為數據庫的一部分自動備份(這非常有意義)。 因此,最后一步是配置已恢復的現有數據庫主密鑰,使其處於目標計算機上服務主密鑰的控制之下。 SSMS 會自動重新布線。

忘記了如何再次執行此操作的細節,不得不去尋找一些額外的信息,以供可能需要它的任何人使用。

至少有兩種方法可以完成此操作,如果您不能掌握數據庫密鑰的密碼但您是 SQL Server 管理員,則第二種方法很有用。

在這種情況下,您可以在恢復備份的數據庫之前導出服務器主密鑰並覆蓋目標服務器中的主密鑰。 當然,這只適用於新服務器,或者尚未使用證書的服務器,或者在極端情況下,如果您知道目標中所有證書的密鑰密碼,並且可以按照 EvilDr 的描述重置它們。

USE MASTER
GO
--On original SQL Server set password
BACKUP SERVICE MASTER KEY TO FILE = 'C:\temp\smk' ENCRYPTION BY PASSWORD = 'password';
GO
--On new SQL Server - BEFORE restoring backed up database (or else conflict)
RESTORE SERVICE MASTER KEY FROM FILE = 'C:\temp\smk' DECRYPTION BY PASSWORD = 'password';
GO
--Then restore database from backup with certificate and key included

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM