--创建主密钥(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