从具有不同用户权限的存储过程执行 SSIS 包

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-auth 登录等的黑暗世界

计划 C 和 D

我能想到的唯一选择是创建一个具有提升权限的专用 SQL Server 登录,并相信用户不会传递凭据/失去对谁安排导入的可审计性(如何在其他领域解决此问题)组织),或者自定义构建一个 Web 前端,纯粹是为了允许用户作为他们的“服务器角色”帐户进行身份验证,然后让 Web 应用程序在第二个(特权)连接下运行存储过程。

所以....

关于如何:

  • 让 SSIS 包执行特权操作
  • 由低权限用户执行(使用 AD windows 帐户)
  • 最好是通过中央服务器角色管理运行作业的访问权限(我无法轻松为他们创建新的 Windows 组)
  • 并且任何新的中间/代理帐户都是 SQL Server 身份验证帐户(同样,对 AD 进行更改的能力非常有限)

我知道这里有很多活动部件(有些感觉像是在旋转刀片),所以如果您觉得我错过了任何其他信息,请告诉我。

干杯,蒂姆

编辑....

所以今天我创建了一个具有 ssis_admin 权限的专用 SQL Server 登录,创建了该用户拥有的三个 SQL Server 代理作业,并更新了我的最终用户调用execute as该用户的存储过程。由于无法create execution作为 SQL Server 登录名调用,因此失败,它需要 Windows 帐户。

我将用户存储过程更新为execute asSQL Server 作为(AD 服务帐户)运行的 Windows 帐户,授予它ssis_admin但失败并出现错误

当前安全上下文无法恢复。请切换到调用“执行方式”的原始数据库,然后重试。

这不会很快:(

Wok*_*ket 2

为了后代,我通过以下方式完成了这项工作:

  • 将用户调用的存储过程 ( Admin.RunImport) 更改为“以 SQL 服务使用的帐户执行”
  • SQL Server 服务帐户(AD 托管服务帐户)被修改为具有执行管理存储过程的权限,从而允许使用execute as上述内容
  • SQL Server 服务帐户已修改为具有 ssisdb.ssis_admin 和 msdb.SQlAgentOperator 角色。
  • 此存储过程根据传递的参数对 Admin.RunImport3 个代理作业之一进行排队sp_start_job
    • 需要通过 SQL 代理进行此重定向才能绕过上面的 ssis 安全上下文错误
    • 代理作业由“sa”拥有,并且只需执行Raw.hp_Execute_Import_Impl为每个作业传递不同参数的底层存储过程 ( )。
    • 这意味着代理作业sa由于上述 ssis_admin 权限而运行,与计划作业相同
  • 存储过程像平常一样Raw.hp_Execute_Import_Impl对 SSIS 包进行排队。sa

我认为这已经是我目前能得到的最好的了,而不是为此目的创建专用的 Windows 帐户。

感谢各位的帮助!

  • 感谢您回来并发布解决方案。现在,当您再次遇到此问题并且忘记了自己做了什么时,您可以在网络上搜索,您会找到自己的解决方案! (2认同)