Wok*_*ket 14 sql-server ssis sql-server-2014 ssis-2014
由于所需的权限级别不同,我在允许我的用户以合理的方式执行 SSIS 包时遇到了问题。
场景:我们创建了一个数据仓库,有两个不同的 SSIS 包负责加载数据,一个是自动运行的(通过 SQL 代理作业,并且工作正常),另一个必须运行 -一旦上游数据最终确定和清理等,用户的需求。
这个包执行非常有特权的操作,包括在运行开始时备份数据库(可以肯定,可以肯定),删除和重新创建计算表等。
我已经编写了一个存储过程来通过 [SSISDB].[catalog].[create_execution] 和 [SSISDB].[catalog].[start_execution] 存储过程来执行这个作业......这在我的帐户下运行时很好用(我是系统管理员)。
由于 SSISDB 和 MSDB 需要更高级别的权限才能将执行排入队列,因此普通用户运行存储过程失败,并且包本身失败,因为它在其(低级)安全上下文中运行。
我试过的:
我试图在存储过程中使用“执行为”来解决这个问题,但是由于跨数据库链接问题、可信标志等,这失败了。
我还试图通过让代理作业运行包来解决这个问题,并且只是从存储过程中运行代理作业,但是我很快就进入了一个痛苦的世界,涉及:
我能想到的唯一选择是创建一个具有提升权限的专用 SQL Server 登录,并相信用户不会传递凭据/失去对谁安排导入的可审计性(如何在其他领域解决此问题)组织),或者自定义构建一个 Web 前端,纯粹是为了允许用户作为他们的“服务器角色”帐户进行身份验证,然后让 Web 应用程序在第二个(特权)连接下运行存储过程。
关于如何:
我知道这里有很多活动部件(有些感觉像是在旋转刀片),所以如果您觉得我错过了任何其他信息,请告诉我。
干杯,蒂姆
所以今天我创建了一个具有 ssis_admin 权限的专用 SQL Server 登录,创建了该用户拥有的三个 SQL Server 代理作业,并更新了我的最终用户调用execute as该用户的存储过程。由于无法create execution作为 SQL Server 登录名调用,因此失败,它需要 Windows 帐户。
我将用户存储过程更新为execute asSQL Server 作为(AD 服务帐户)运行的 Windows 帐户,授予它ssis_admin但失败并出现错误
当前安全上下文无法恢复。请切换到调用“执行方式”的原始数据库,然后重试。
这不会很快:(
为了后代,我通过以下方式完成了这项工作:
Admin.RunImport) 更改为“以 SQL 服务使用的帐户执行”execute as上述内容Admin.RunImport3 个代理作业之一进行排队sp_start_jobRaw.hp_Execute_Import_Impl为每个作业传递不同参数的底层存储过程 ( )。sa由于上述 ssis_admin 权限而运行,与计划作业相同Raw.hp_Execute_Import_Impl对 SSIS 包进行排队。sa我认为这已经是我目前能得到的最好的了,而不是为此目的创建专用的 Windows 帐户。
感谢各位的帮助!