在多台服务器上创建SQL Server证书

时间:2018-07-11 19:45:13

标签: sql-server powershell

我已经在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编写脚本还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

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仅用于保护传输中的证书。也就是说,它不是证书本身的密码。