SQL Server 2017配置SSIS包提示存在的参数myParm不存在如何解决
问题成因
- SSISDB内置系统存储过程
set_object_parameter_value默认通过WITH EXECUTE AS 'AllSchemaOwner'语句切换到内置用户AllSchemaOwner的上下文执行,内部所有查询的权限都继承自该用户,而非当前操作的myDomain\myAccount账号权限。 AllSchemaOwner用户的默认权限丢失:如果做过SSISDB迁移、权限批量回收、实例重装附加SSISDB等操作,会导致该用户对[catalog].[object_parameters]视图的行级访问权限不足,或是没有myFolder/myProject项目的读取权限,执行内部查询时返回空结果,就触发参数不存在的报错。- 你手动执行查询时使用的是
myDomain\myAccount的权限,该账号已经拥有对应SSIS项目的操作权限,所以可以正常查询到参数记录,和存储过程内的执行上下文权限不一致是核心原因。
解决方案
临时应急方案
如果仅需临时修改参数完成上线,可暂时注释set_object_parameter_value存储过程内的WITH EXECUTE AS 'AllSchemaOwner'和EXECUTE AS CALLER两行代码。注意该修改属于系统存储过程改动,SQL Server版本升级、SSISDB补丁更新时修改会被覆盖,且存在安全风险,不建议长期使用。
永久修复方案(推荐)
方案1:修复AllSchemaOwner的内置权限
执行以下SQL补全SSISDB内置用户的默认权限:
USE SSISDB GO -- 授予AllSchemaOwner基础的目录对象访问权限 GRANT VIEW DEFINITION ON SCHEMA :: [catalog] TO [AllSchemaOwner] GO GRANT SELECT ON [catalog].[object_parameters] TO [AllSchemaOwner] GO
如果是权限管控宽松的环境,也可以直接将该用户加入ssis_admin角色:
USE SSISDB GO ALTER ROLE [ssis_admin] ADD MEMBER [AllSchemaOwner] GO
方案2:给操作账号授予对应权限
直接给你当前使用的myDomain\myAccount账号授予对应SSIS项目的操作权限,无需修改系统存储过程:
- 打开SSMS,展开集成服务目录 -> SSISDB -> 找到你的文件夹
myFolder,右键选择属性 -> 权限 - 点击搜索,添加你的域账号
myDomain\myAccount,授予读取对象、执行、修改权限,勾选将权限应用到该文件夹下的所有子对象后保存 - 权限配置完成后重新执行参数设置语句即可正常执行。
内容的提问来源于stack exchange,提问作者faujong
相关产品推荐
相关产品推荐

