将SQL Server 2019升级到2022 Always On后无法部署SSIS包
解决SQL Server 2022 Always On中SSISDB加入AG后的部署/运行失败问题
问题分析
错误核心为microsoft.sqlserver.integrationservices.server程序集加载失败,属于CLR安全权限范畴。在Always On环境下,AG仅同步用户数据库元数据,master库的安全对象(证书、登录名等)不会自动同步,导致跨节点的程序集权限验证失效,进而引发部署包失败、Agent作业停滞在Created Execution状态的问题。
解决方案
1. 校验所有AG节点的SSISDB程序集状态
在每个AG节点执行以下查询,确认程序集存在且权限配置一致:
USE SSISDB; GO SELECT name, permission_set_desc, is_visible FROM sys.assemblies WHERE name = 'microsoft.sqlserver.integrationservices.server';
确保结果中permission_set_desc值为EXTERNAL_ACCESS,若节点间存在差异,执行语句修正:
ALTER ASSEMBLY [microsoft.sqlserver.integrationservices.server] WITH PERMISSION_SET = EXTERNAL_ACCESS; GO
2. 重新注册SSIS程序集(若损坏或缺失)
若某节点程序集缺失,从SQL Server 2022安装路径重新加载(替换为实际安装路径):
USE SSISDB; GO CREATE ASSEMBLY [microsoft.sqlserver.integrationservices.server] FROM 'C:\Program Files\Microsoft SQL Server\160\DTS\Binn\Microsoft.SqlServer.IntegrationServices.Server.dll' WITH PERMISSION_SET = EXTERNAL_ACCESS; GO
3. 统一所有AG节点的CLR安全配置
启用CLR并配置严格安全
在每个AG节点执行:
USE master; GO sp_configure 'show advanced options', 1; RECONFIGURE; GO sp_configure 'clr enabled', 1; RECONFIGURE; GO sp_configure 'clr strict security', 1; RECONFIGURE; GO
创建程序集验证证书与登录名
由于AG不同步master库对象,需在每个AG节点手动执行:
USE master; GO -- 从SSIS程序集导出证书 CREATE CERTIFICATE SSISAssemblyCert FROM ASSEMBLY [microsoft.sqlserver.integrationservices.server]; GO -- 创建关联登录名 CREATE LOGIN SSISAssemblyLogin FROM CERTIFICATE SSISAssemblyCert; GO -- 授予不安全程序集权限 GRANT UNSAFE ASSEMBLY TO SSISAssemblyLogin; GO
4. 确保SSISDB的TRUSTWORTHY属性与所有者一致
在每个AG节点执行:
-- 启用TRUSTWORTHY ALTER DATABASE SSISDB SET TRUSTWORTHY ON; GO -- 检查数据库所有者,确保为高权限账户(如sa) USE SSISDB; SELECT SUSER_SNAME(owner_sid) AS DB_Owner; GO -- 若所有者权限不足,修改为sa ALTER AUTHORIZATION ON DATABASE::SSISDB TO sa; GO
5. 同步AG节点的SSIS服务与数据库状态
- 在所有AG节点重启**SQL Server Integration Services (SSIS)**服务
- 重启SSISDB的AG副本同步:
ALTER DATABASE SSISDB SET HADR RESUME; GO
6. 验证SQL Server Agent作业执行上下文
- 确认运行SSIS包的Agent代理账户拥有
SSISDB的ssis_admin角色权限 - 确保该代理账户在所有AG节点均存在且权限配置一致
内容的提问来源于stack exchange,提问作者Msharma
相关产品推荐
相关产品推荐

