问题描述
RDS For SQL Server备份恢复到本地报错:Cannot find server certificate with thumbprint,如截图
问题原因
RDS 实例开启了TDE功能,但是在还原时候,没有在本地实例上恢复证书。
解决方案
场景1:没有证书
先在阿里云RDS控制台将不需要开启TDE功能的数据库移除(如截图),然后执行三次日志备份(因为关闭TDE时,很多数据已经在内存中了),再做一个全量备份,使用这个全量备份恢复到本地
场景2:有证书
创建DMK
第一步是使用密码在目标服务器上的主数据库中创建数据库主密钥 (DMK)。
此密码不必与源服务器中用于创建 DMK 的密码相同。
如果目标服务器中已经存在 DMK,则无需创建另一个
USE master;GO CREATE MASTER KEY ENCRYPTION BY PASSWORD ='DifferentP@$$w0rd';--此处密码自定义GO
创建证书
使用开启TDE功能时自带的证书和私钥,应用到目标服务器实例。
通过 CREATE CERTIFICATE 语句将证书添加到目标服务器中的主数据库。
注意 FROM FILE 和 FILE 参数指向证书和私钥文件。
USE MASTER GO CREATE CERTIFICATE TDETest_Certificate FROM FILE ='D:\MSSQL\bacup\TDETest_Cert'--此处修改为实际路径WITH PRIVATE KEY (FILE ='D:\MSSQL\bacup\TDETest_CertKey.pvk',--此处修改为实际路径DECRYPTION BY PASSWORD ='DifferentP@$$w0rd');--此处修改为实际密码
再恢复数据库
RESTORE DATABASE [db02]-- 此处修改为实际数据名称FROM DISK = N'D:\MSSQL\bacup\db02.bak';--此处修改为实际路径
注:在2016之前的版本,开启TDE功能,是不支持备份压缩的,所以开启TDE与未开启TDE空间有几倍的差距。
参考文档:
TDE功能:https://help.aliyun.com/document_detail/95716.html#section-7pn-r5w-lrw
TDE功能:https://learn.microsoft.com/en-us/sql/relational-databases/security/encryption/move-a-tde-protected-database-to-another-sql-server?view=sql-server-ver16
TDE压缩:https://docs.microsoft.com/en-us/archive/blogs/sqlcat/sqlsweet16-episode-1-backup-compression-for-tde-enabled-databases