sql - 使用 SQL 身份验证执行 SSIS 包
问题描述
我有一个通过 HTTP 与远程服务器通信的 SSIS 包。我使用从 Web 服务器调用的数据库 (SQL Server 2012) 中的存储过程执行 SSIS 包。Web 服务器使用 Windows 身份验证连接到数据库。我现在需要从不支持 Windows 身份验证的客户端运行存储过程(以及因此 SSIS 包)。SSIS 包非常复杂,迁移到不同的解决方案是不可行的。
SSIS 包具有传递的复杂变量。运行包的存储过程如下所示:
CREATE PROCEDURE [dbo].[SSISPackage]
@Parameter1 XML
AS
BEGIN
SET NOCOUNT ON;
DECLARE @execution_id BIGINT
EXEC [SSISDB].[catalog].[create_execution]
@package_name=N'Package.dtsx',
@execution_id=@execution_id OUTPUT,
@folder_name=N'API',
@project_name=N'APIProject',
@use32bitruntime=False,
@reference_id=Null
EXEC [SSISDB].[catalog].[set_execution_parameter_value]
@execution_id,
@object_type=30,
@parameter_name=N'Parameter1',
@parameter_value=@Parameter1
EXEC [SSISDB].[catalog].[start_execution] @execution_id
END
从我一直在阅读的内容来看,使用 SQL Server 身份验证对用户进行身份验证是不可能运行 SSIS 包的。
我的问题是:
- 是否可以以某种方式将 SQL 用户提升为 Windows 身份验证用户,然后执行存储过程。
- 是否有处理这个问题的典型方法(例如 CLR、队列表、命令行调用包)?
解决方案
这就是我所做的,也许它可以帮助某人。
第一步,我以sysadmin身份创建了一个 SQL 身份验证登录名,并允许该登录名模拟其他登录名。
然后,在调用 SSIS 包之前,我也模拟了一个sysadmin的 Windows 身份验证登录。要将脚本作为另一个登录名执行,我使用了TSQL EXECUTE AS
. (检查下面的例子)
例如: server\winuser
使用 Windows 身份验证作为sysadmin,以及 SQL 身份验证登录也sqlauthuser
作为sysadmin。
为 启用“模拟任何登录” sqlauthuser
。登录(或使用连接字符串进行连接),sqlauthuser
然后模拟server\winuser
以能够调用 SSIS 包或过程:
EXECUTE AS LOGIN = 'server\winuser';
-- call ssis packages
-- call procedures that uses ssis packages
参考:https ://docs.microsoft.com/en-us/sql/t-sql/statements/execute-as-transact-sql?view=sql-server-ver15
推荐阅读
- django - Django 页面初始加载时间过长
- python - Python:lambda 捕获与列表
- java - 请求在 Tomcat 8 中返回 400 错误请求
- excel - Excel VBA 代码适用于我,但不适用于其他人
- python - 你如何模拟动态添加的对象方法?
- appium-android - 无法使用 codeceptJS 测试原生 Android 应用
- dataframe - 使用正确的列名从多索引数据框创建一个新的
- python - 在另一个夹具中使用 requests_mock 时,模拟 URL 未转发给处理程序
- qt - QVBoxLayout 用 spacer 推到顶部
- html - 使用位置制作元素:绝对拉伸父级的阴影?