--創建主密鑰(Master Key) USE master GO --DROP MASTER KEY CREATE MASTER KEY ENCRYPTION BY PASSWORD=N'1qaz@WSX'; GO --備份主密鑰 BACKUP MASTER KEY TO FILE=N'C:/master_key.cer' ENCRYPTION BY PASSWORD=N'!QAZ2wsx' GO --創建基于主密鑰的證書。用于保護數據庫加密密鑰(Database Encryption Key) --DROP CERTIFICATE SDB_Cert CREATE CERTIFICATE SDB_Cert WITH SUBJECT=N'Certificate for SecretDB' go --使用私鑰加密的方式備份主密鑰的證書 BACKUP CERTIFICATE SDB_Cert TO FILE=N'C:/SDB_Cert.cer' WITH PRIVATE KEY ( FILE =N'C:/SDB_Cert.pvk', ENCRYPTION BY PASSWORD='!QAZ2wsx' ) GO --創建測試庫SecretDB USE master GO CREATE DATABASE SecretDB GO USE SecretDB GO CREATE TABLE SDB_TB (ID INT,VAL NVARCHAR(20)); INSERT INTO SDB_TB VALUES (1,N'A'),(2,N'B'),(3,N'C'); GO USE SecretDB go --創建數據庫加密密鑰 CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM=AES_128 ENCRYPTION BY SERVER CERTIFICATE SDB_Cert; GO --啟用數據庫加密 USE SecretDB go ALTER DATABASE SecretDB SET ENCRYPTION ON go --備份SecretDB,用于后續的異機還原測試 USE master go BACKUP DATABASE SecretDB TO DISK=N'D:/SecretDB.bak' go 在完成這些后,SecretDB庫已經加密,并且得到其加密后的備份文件,接下來需要在另臺還原這個備份。 我把SecretDB.bak,SDB_Cert.cer,SDB_Cert.pvk拷到別一臺機。直接還原的話,會報錯。需要創建原來用于加密的證書來還原數據庫備份。我的目的達到了! --在異機上恢復SecretDB的備份 USE master GO CREATE DATABASE SecretDB GO RESTORE DATABASE SecretDB FROM DISK=N'D:/SecretDB.bak' WITH REPLACE GO --消息 33111,級別 16,狀態 3,第 1 行 --找不到指紋為 '0x0106000000000009010000009C529FFD5C7FD72FD0AAE9EDF46C5F69946FFED0' 的服務器 證書。 --消息 3013,級別 16,狀態 1,第 1 行 --RESTORE DATABASE 正在異常終止。 創建證書并還原。 USE master GO CREATE CERTIFICATE SDB_Cert FROM FILE=N'C:/SDB_Cert.cer' WITH PRIVATE KEY ( FILE=N'C:/SDB_Cert.pvk', DECRYPTION BY PASSWORD=N'!QAZ2wsx' ) GO RESTORE DATABASE SecretDB FROM DISK=N'D:/SecretDB.bak' WITH REPLACE GO