gpt4 book ai didi

sql-server - 以与 SSISDB 不同的用户身份执行 SSIS 包

转载 作者:行者123 更新时间:2023-12-03 00:20:30 25 4
gpt4 key购买 nike

我们要求用户使用代理帐户并引用输入参数来执行 SSIS 包。

以下演示了用于调用包执行的语法...

DECLARE @ExportID INT = 1;
DECLARE @ExecutionID INT;

EXECUTE AS [proxy_account]

EXEC [SSISDB].[catalog].[create_execution]
@folder_name = 'DW',
@project_name = 'DW_ETL',
@reference_id = NULL,
@use32bitruntime = 1,
@execution_id = @ExecutionID OUTPUT;

EXEC [SSISDB].[catalog].[set_execution_parameter_value]
@execution_id = @ExecutionID,
@object_type = 30,
@parameter_name = 'ExportID',
@parameter_value = @ExportID;

EXEC [SSISDB].[catalog].[start_execution]
@execution_id = @ExecutionID;

REVERT

这导致了以下错误消息:

The current security context cannot be reverted. Please switch to the original database where 'Execute As' was called and try it again.

跟踪代码后,在 SSISDB.catalog.start_executionSSISDB.internal.prepare_execution 存储过程中找到了以下代码

EXECUTE AS CALLER
...
REVERT

这导致语句失败,因为它覆盖了尝试指定的代理帐户。通过注释掉 SSISDB.catalog.start_executionSSISDB.internal.prepare_execution 中的 REVERT 语句,代码以代理帐户成功执行。

我并不热衷于绕过开发人员出于某种原因而放入的代码,但我需要一种方法来通过存储过程作为代理帐户执行该语句,并且此方法有效。任何人都可以建议使用不引用 REVERT 的 SSISDB.catalog.start_executionSSISDB.internal.prepare_execution 存储过程的替代版本是否会产生任何后果?

谢谢

伊恩

最佳答案

要以与 SSISDB 不同的用户身份执行 SSIS 包,您需要利用 SQL Server 代理中的某些功能。

您需要创建一个对 SSIS 数据库具有 db_datareader 访问权限的凭据。您需要设置一个有权执行集成服务包的代理。

最后,一旦您完成了这些先决条件设置,您就可以创建一个 SQL Server 代理作业,该作业以您设置的任何代理帐户的身份从 Integration Services 目录运行您的 SSIS 包。

这里有一篇文章提供了有关如何设置我上面描述的内容的更详细方法:https://www.mssqltips.com/sqlservertip/2163/running-a-ssis-package-from-sql-server-agent-using-a-proxy-account/

关于sql-server - 以与 SSISDB 不同的用户身份执行 SSIS 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43192801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com