SQL Server 2014代理备份作业报找不到加密证书的错误
SQL Server 2014 加密备份Agent作业报15151错误的解决方法
错误15151的本质并非证书实际不存在,绝大多数场景下是当前执行主体对证书的访问权限不满足要求,SQL Server会统一返回“证书不存在或无对应权限”的提示。
手动调用USP可正常执行,是因为手动执行时使用的账号(通常为sysadmin高权限账号)天然具备证书访问权限;当切换为SQL Server Agent作业运行的myuser身份时,因权限配置不达标就会触发报错。此前仅授予VIEW DEFINITION权限的操作,存在作用域错配、权限等级不足的问题,无法解决故障。
步骤1:校验证书的正确存储位置
服务器级加密备份通过SERVER CERTIFICATE子句引用的证书,必须存储在master数据库中。如果当初创建证书的会话未切换到master库执行,证书会被存到当前连接的业务库,导致备份操作无法检索到目标证书。
执行以下语句核对证书位置:
USE master; SELECT c.name AS cert_name, DB_NAME(c.database_id) AS cert_storage_db FROM sys.certificates c WHERE c.name = 'dbMasterEncryptionCert';
- 如果返回的存储库不是master:需要将该证书(连同关联私钥)通过
BACKUP CERTIFICATE导出,再重新在master库中创建,否则后续所有权限配置都无法生效。
步骤2:在正确的库上下文完成权限授权
此前执行的授权语句存在两个核心问题:
- 作用域错配:如果执行授权的会话不是在master库上下文,
GRANT ... ON CERTIFICATE::dbMasterEncryptionCert实际是对当前所在库的同名证书做授权,对master库中存储的目标证书完全无效。 - 权限不足:仅授予
VIEW DEFINITION仅能让myuser看到证书元数据,没有访问证书私钥的权限,完全无法满足加密备份的操作要求。
正确的授权操作必须切换到master库上下文执行,给myuser授予证书的CONTROL权限(可正常访问证书关联的私钥):
USE master; -- 移除之前无效的低权限授权 REVOKE VIEW DEFINITION ON CERTIFICATE::dbMasterEncryptionCert TO [myuser]; -- 授予满足备份操作要求的证书操作权限 GRANT CONTROL ON CERTIFICATE::dbMasterEncryptionCert TO [myuser];
步骤3:核对Agent作业的运行身份配置
打开对应SQL Server Agent作业的报错步骤配置页,确认两个核心配置:
- 步骤的“运行身份”栏指定的代理账号确实为
myuser,避免出现“给myuser完成了授权,但作业实际用Agent服务账号身份运行”的权限错配。 myuser对应的SQL登录名,在master、业务库cpg中都存在合法的用户映射,没有断开连接的情况。
步骤4:验证证书私钥的解密通路
如果完成上述操作仍报错,需要确认master库主密钥的解密链路正常:
- 检查master库主密钥是否被SQL Server服务主密钥(SMK)自动加密,执行以下语句校验:
如果返回USE master; SELECT name, is_master_key_encrypted_by_server FROM sys.databases WHERE name = 'master';is_master_key_encrypted_by_server = 0,执行以下语句绑定加密关系:OPEN MASTER KEY DECRYPTION BY PASSWORD = '创建主密钥时设置的原密码'; ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY; CLOSE MASTER KEY; - 以
myuser身份重新登录SSMS,手动执行一次加密备份语句测试通路:
测试执行通过后,再触发SQL Server Agent作业即可正常运行。BACKUP DATABASE cpg TO DISK = 'C:\Test\test_enc_backup.bak' WITH COMPRESSION, ENCRYPTION(ALGORITHM = AES_256, SERVER CERTIFICATE = dbMasterEncryptionCert);
内容的提问来源于stack exchange,提问作者AllData
相关产品推荐
相关产品推荐

