我不知道代理实际上是如何使代理用户工作的——尤其是在 SSIS 包方面。
在 SSMS 中的“正常”sql 会话中,如果我想以另一个用户身份运行查询
EXECUTE AS USER = 'TurgidWizard';
SELECT USER_NAME() AS WhoAmI;
REVERT;
在我拨打REVERT 电话之前,该代码将允许我冒充你。
但是,如果您换出对 create_execution/start_execution 的调用,您将遇到与尝试使用本地 sql server 用户在使用 SSISDB 中的方法时遇到的相同问题 - 它不起作用。 SSISDB 中的方法在开始之前都会运行检查,以确保用户具有正确的访问级别并且不会进行模拟。因为一旦这些方法开始运行,它们自己就会进行模拟,所以我猜这效果不好。
如何在不同的帐户下使用 tsql 运行包?我会在凭据下使用RUNAS 启动SSMS/sqlcmd 例如,下面会为您打开一个新的命令窗口。
runas /netonly /user:corpdomain.com\turgiwizard "cmd"
从那里开始,我所做的事情将在你的用户的支持下,所以我可以像这样运行 sqlcmd 调用
sqlcmd -S TheServer -d SSISDB -Q "EXECUTE catalog.create_execution ...;"
鼠标单击将是 Ctrl+Shift+右键单击可执行文件。
您的 SSMS 安装位置取决于版本,但请在以下路径中尝试各种 140 的十位数增量
C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\ManagementStudio\Ssms.exe
关于 runas 的缺点是我无法自动将我的凭据传递给它。我看过关于使用自动热键之类的文章,但从来没有运气。
对于需要定期运行的东西,最干净/最简单的方法是使用带有代理的 sql 代理,或者您可以使用 Windows 任务计划程序并将其创建为目标用户。一次性处决,我可能会使用 runas 方法。