由于所需的特权级别不同,我在允许我的用户以合理的方式执行SSIS包时遇到问题。
场景:我们创建了一个数据仓库,其中有两个不同的SSIS软件包负责向其中加载数据,一个要自动运行(通过SQL Agent作业,并且运行良好),另一个必须在以下位置运行:一旦上游数据完成并清理等,用户的需求。
该程序包执行非常特权的操作,包括在运行开始时备份数据库(当然),删除和重新创建计算表等。
我已经编写了一个存储过程,以通过[SSISDB]。[catalog]。[create_execution]和[SSISDB]。[catalog]。[start_execution]存储过程来执行此作业。 (我是系统管理员)。
由于SSISDB和MSDB要求执行排队的高级权限,存储过程在由普通用户运行时失败,并且程序包本身由于在其(较低)安全性上下文下运行而失败。
我已经试过:
我试图在存储过程中使用“ Execute As”解决问题,但是由于跨数据库链接问题,Trustworthy标志等而失败。
我还尝试通过让Agent作业运行程序包并仅从存储过程运行Agent作业来解决该问题,但是我很快陷入了一个痛苦的世界,涉及到:
- 无法按工作设置执行权限
- 希望通过中央服务器角色配置此访问权限,以适应随时间推移而变化的员工,并且作业只能由一个用户作为所有者
- 代理帐户,凭据与sql-auth登录等结合使用的黑暗世界
计划C和D
我能想到的唯一的选择就是创建具有提升权限的专用SQL Server登录名,并相信用户不要传递凭据,也不会丢失计划导入的人员的可审核性(在其他方面解决此问题的方法)组织)或自定义构建Web前端,纯粹是为了允许用户认证为“服务器角色”帐户,然后让Web应用在第二个(特权)连接下运行存储过程。
所以....
是否有关于如何进行以下操作的建议:
- 让SSIS包执行特权操作
- 特权较低的用户(使用AD Windows帐户)执行
- 最好是通过中央服务器角色来管理运行作业的访问权限(我不容易为它们创建新的Windows组)
- 并且任何新的中级/代理帐户都是SQL Server Auth帐户(同样,对AD进行更改的能力非常有限)
我知道这里有很多活动部件(有些感觉就像是旋转的刀片),所以请让我知道您是否还想念其他信息。
蒂姆,干杯
编辑....
因此,今天我创建了一个具有ssis_admin权限的专用SQL Server登录,创建了该用户拥有的三个SQL Server Agent作业,并将最终用户调用的存储过程更新execute as
为该用户。由于无法调用create execution
SQL Server登录名而失败,它需要Windows帐户。
我将用户存储过程更新为execute as
Windows帐户,SQL Server以(AD服务帐户)身份运行,并且授予该证书ssis_admin
,但失败并显示错误
当前的安全上下文无法还原。请切换到调用“ Execute As”的原始数据库,然后重试。
这并不能很快实现:(
create_execution
因为我确实需要将一个参数(三个值之一)从存储过程传递到作业。如果能够解决问题,我很高兴拥有三个存储库/作业等。2)如果ssis_admin是让我到达那里的最低特权角色,那么我很乐意……至少比sysadmin更好,并且可以解决它们意外删除/伪装通用仓库表的问题。
ssis_admin
角色将允许他们运行SSIS包(procs检查sysadmin或ssis_admin角色的成员身份),但我认为它将像它们一样运行,因此无法进行备份等。(我必须对此进行测试,以至于永远无法记住它是否以它们或SQL Server服务帐户的身份运行)。但是,成为ssis_admin的成员可以使他们部署程序包并混淆配置,这可能不是好事。2016年给了我们更精细的角色,但在这里显然没有多用
EXECUTE AS
以使他们可以通过来运行特定的作业sp_start_job
。说安全性
create_execution
即他们是否需要在执行时为其“数据准备就绪的情况”指定参数?2)可以肯定地认为您不希望将它们放在ssis_admin角色中吗?