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
新聞熱點
疑難解答