首页 > 解决方案 > 在多台服务器上创建 SQL Server 证书

问题描述

我在 SQL Server 上创建了一个证书,用于加密我的数据库备份。我使用以下文章获取说明。

https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/backup-encryption?view=sql-server-2016

我需要将此数据库还原到多台服务器。我可以使用以下代码在另一台服务器上导入/创建证书。

-- Copy Certificate to target then create
CREATE CERTIFICATE myCertificate   
    FROM FILE = 'C:\Temp\CertBackup.cer'   
    WITH PRIVATE KEY (FILE = 'C:\Temp\CertBackup.pvk',   
    DECRYPTION BY PASSWORD = 'myPassword'); 
GO

我希望能够一次将此证书导入多台服务器,而不是在每台服务器上运行此命令。我应该使用 Powershell 编写脚本还是有更好的方法?

标签: sql-serverpowershell

解决方案


DECLARE @password VARCHAR(40) = 'f00bar!23'
select name, 'create certificate ' + QUOTENAME(name) + ' from binary = ' 
    + CONVERT(VARCHAR(MAX), CERTENCODED(CERT_ID(name)), 1)
    + ' with private key ( binary = ' 
    + CONVERT(VARCHAR(MAX), CERTPRIVATEKEY(CERT_ID(name), @password), 1)
    + ', decryption by password = ''' + @password + ''')'
FROM sys.[certificates] AS [c]
WHERE name = '«cert name here»';

运行它,它将生成一个 T-SQL 语句,允许您创建证书而无需使用证书备份。以上假设证书的私钥受数据库主密钥保护。如果它受密码保护,则必须相应地修改代码(留给读者练习)。

注意:@password仅用于保护传输中的证书。也就是说,它不是证书本身的密码。


推荐阅读