Sql-Server

在內部創建加密備份以在客戶端恢復

  • March 1, 2019

我試圖了解數據庫備份加密的機制,但有一些問題,我似乎無法理解。我有兩個要求:

  1. 我需要能夠“本地”創建和恢復加密的數據庫備份,即在我擁有完全訪問權限的伺服器上。
  2. 我需要能夠將加密的數據庫備份傳輸給負責管理和執行還原的客戶端。

在我的本地伺服器上

我創建了一個主密鑰並將其備份到安全位置:

USE MASTER
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MasterKey_Password';

BACKUP MASTER KEY
TO FILE = '<Secure_Location>\MASTER_KEY.key'
ENCRYPTION BY PASSWORD = 'MasterKey_BACKUP_Password';

接下來,我創建了一個證書並將其備份到安全位置:

CREATE CERTIFICATE MyBackupCertificate
WITH SUBJECT = 'MyBackupCertificate_Subject';

BACKUP CERTIFICATE MyBackupCertificate
TO FILE = '<Secure_Location>\CERTIFICATE_BACKUP.cer'
WITH PRIVATE KEY(
   FILE = '<Secure_Location>\CERTIFICATE_BACKUP_PRIVATE_KEY.key',
   ENCRYPTION BY PASSWORD = 'Certificate_BACKUP_Password');

最後,我使用證書對數據庫進行了備份以對其進行加密:

BACKUP DATABASE MyDatabaseToBackup
TO DISK = '<Backup_Location>\BACKUP_FILE.bak'
WITH ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = MyBackupCertificate)

在我的客戶端伺服器上

我已將數據庫備份文件轉移到可從 SQL Server 實例訪問的位置。.cer 文件也已傳輸到此位置。

USE MASTER
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'Another_MasterKey_Password';

從 .cer 文件創建證書:

CREATE CERTIFICATE MyDatabaseToBackup
FROM FILE = '<Client_Secure_Location>\CERTIFICATE_BACKUP.cer'

嘗試恢復文件列表時,我遇到了消息

RESTORE FILELISTONLY FROM DISK = '<Client_Backup_Location>\BACKUP_FILE.bak'

Msg 15507, Level 16, State 30, Line 11 此操作所需的密鑰似乎已損壞。

我一直在嘗試(幾乎)相同的其他一些文章,但我不明白,為什麼我必須將證書私鑰轉移給我的客戶。這不是破壞了加密的全部目的嗎?

在另一台伺服器上恢復加密數據庫(使用備份加密)

從 .cer 文件創建證書

$$ … $$

您創建了證書,但沒有包含私鑰的導入,因此無法使用此證書解密數據。

為什麼我必須將證書私鑰轉移給我的客戶。

在這種情況下,證書(本質上只是一個非對稱密鑰)使用公鑰加密數據,使用私鑰解密數據。請參閱我上面的其他回复。

這不是破壞了加密的全部目的嗎?

不,但它違背了通過 SQL Server 為您的案例進行備份加密的目的。由於您希望自己(第一方)和一些隨機的第三方能夠加密和解密數據,因此您需要同意使用一組密鑰(這會使您的其他內部項目面臨風險)或使用SQL Server 備份加密之外的不同方法,您可以在其中指定其他加密器選項。

他們無法在沒有所需資訊的情況下解密數據這一事實加密的重點。在這種情況下,它正在正確地完成工作,只是您的要求並不意味著以這種方式使用它。

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