是否可以使用密码证书加密来创建加密备份?

got*_*tqn 5 sql-server backup encryption sql-server-2016 sql-server-2017

我已通过密码证书加密,我想将其用于备份加密。问题是我无法使用证书(在 T-SQL 语句或维护计划中),因为我无法打开它 - 似乎没有OPEN CERTIFICATE命令。

我希望通过密码加密证书,因为我们的目标是只有一个用户负责在 SQL Server 实例中创建/插入证书。没有其他人能够导出证书并恢复加密的备份。

是否有可能,或者为了加密备份,我必须始终使用数据库主密钥加密证书?

Sol*_*zky 5

据我所知:不,不能在BACKUP命令中使用受密码保护的证书;证书或非对称密钥需要由数据库主密钥 (DMK) 保护。

  1. BACKUP命令语句的语法无法为证书或非对称密钥指定密码。不,您没有OPEN证书(甚至非对称密钥)。您只需要OPEN对称密钥和数据库主密钥(它们是对称密钥)。

  2. 尝试使用受密码保护的证书时,会出现以下错误(已添加强调):

    消息 33101,级别 16,状态 1,第 123 行
    无法使用证书“BackupEncryption”,因为其私钥不存在或不受数据库主密钥的保护。SQL Server 需要能够自动访问用于此操作的证书的私钥。

我寄予厚望,创建一个受 DMK 保护的证书会起作用,因为它通常会强制您首先执行OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password';以对 DMK 执行任何操作,而我确实做到了必须这样做才能创建证书,但是,一旦创建了证书(是的,我确实执行了CLOSE MASTER KEY;),该BACKUP语句仍然可以工作,而无需显式打开 DMK。这很奇怪,因为证书的私钥不应该在不执行的情况下可用OPEN,并且加密内容肯定需要私钥(尝试使用已删除私钥的证书进行加密备份将失败)。

Sooooo,看来您需要在 SQL Server 之外处理此问题。如:

  1. 执行备份
  2. 加密.bak文件

您可以通过以下几种方式完成此操作:

  1. 通过存储过程:

    1. BACKUP...
    2. xp_cmdshell 加密
  2. SQL 代理作业

    1. T-SQL 步骤执行 BACKUP...
    2. 执行加密的操作系统命令PowerShell 步骤
  3. CMD脚本:

    1. SQLCMD.EXE 正在执行BACKUP...
    2. 加密