System.Data.SqlClient.SqlError: 找不到指纹为 ‘0x3C2BB1B8A82F8C40441C781B3DE33AC6E0830C50’ 的服务器 证书。 (Microsoft.SqlServer.SmoExtended)
在 SQL Server 中还原数据库时,如果遇到类似以下错误:
System.Data.SqlClient.SqlError: 找不到指纹为 '0x3C2BB1B8A82F8C40441C781B3DE33AC6E0830C50' 的服务器证书。 (Microsoft.SqlServer.SmoExtended)
这通常意味着备份的数据库使用了加密,但还原的服务器上缺少所需的证书。要解决这个问题,可以按照以下步骤操作:
首先确认你的数据库备份是否使用了加密。你可以通过查看备份时使用的选项或咨询负责备份的人来确认这一点。
在原始服务器上,找到并导出用于加密数据库的证书。以下是导出证书的示例:
USE master; GO -- 导出证书并保护私钥(将路径替换为你实际的路径) BACKUP CERTIFICATE YourCertificateName TO FILE = 'C:\path\to\backup\YourCertificateName.cer' WITH PRIVATE KEY ( FILE = 'C:\path\to\backup\YourCertificateName.pvk', ENCRYPTION BY PASSWORD = 'YourStrongPassword' ); GO
将导出的证书文件 (.cer) 和私钥文件 (.pvk) 复制到目标服务器。然后,在目标服务器上导入证书:
.cer
.pvk
USE master; GO -- 创建主密钥(如果还没有) CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'AnotherStrongPassword'; GO -- 从文件中创建证书并指定私钥 CREATE CERTIFICATE YourCertificateName FROM FILE = 'C:\path\to\backup\YourCertificateName.cer' WITH PRIVATE KEY ( FILE = 'C:\path\to\backup\YourCertificateName.pvk', DECRYPTION BY PASSWORD = 'YourStrongPassword' ); GO
现在你可以再次尝试还原数据库。由于目标服务器上已经有了所需的证书,数据库还原应该能够成功完成。
RESTORE DATABASE YourDatabaseName FROM DISK = 'C:\path\to\backup\YourDatabaseName.bak'; GO
通过以上步骤,你应该能够成功将加密的数据库备份还原到新的 SQL Server 实例。如果在执行过程中遇到任何问题,请确保原始服务器和目标服务器的配置相同,并检查日志以获得更多信息。