RDS SQL Server 备份恢复到本地报错:Cannot find server certificate with thumbprint

本文摘要:问题描述RDS For SQL Server备份恢复到本地报错#xff1a;Cannot find server certificate with thumbprint#xff0c;如截图 问题原因RDS 实例开启了TDE功能#xff0c;但是在还原时候#xff0c;没有在本地实例上恢复证书......

问题描述


RDS For SQL Server备份恢复到本地报错:Cannot find server certificate with thumbprint,如截图

image


问题原因

RDS 实例开启了TDE功能,但是在还原时候,没有在本地实例上恢复证书。


解决方案


场景1:没有证书

先在阿里云RDS控制台将不需要开启TDE功能的数据库移除(如截图),然后执行三次日志备份(因为关闭TDE时,很多数据已经在内存中了),再做一个全量备份,使用这个全量备份恢复到本地

image


场景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:MSSQLacupTDETest_Cert' --此处修改为实际路径
WITH PRIVATE KEY (FILE = 'D:MSSQLacupTDETest_CertKey.pvk', --此处修改为实际路径
DECRYPTION BY PASSWORD = 'DifferentP@$$w0rd' ); --此处修改为实际密码

再恢复数据库

RESTORE DATABASE [db02]  -- 此处修改为实际数据名称
FROM DISK = N'D:MSSQLacupdb02.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



标签