我已经在SQL Server上创建了一个证书,用于加密数据库备份。我将以下文章用作说明。
我需要将此数据库还原到多个服务器。我可以使用以下代码在另一台服务器上导入/创建证书。
-- 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编写脚本还是有更好的方法?
答案 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
仅用于保护传输中的证书。也就是说,它不是证书本身的密码。