Integration Services Catalog用于执行包的用户凭据是什么?

时间:2013-03-08 08:13:38

标签: sql-server ssis sql-server-2012

我们有一个SSIS包,可以从共享网络目录中读取文本文件。当我在SSDT中执行此包时,它工作正常。然而,当我们将项目部署到 Integration Services Catalog 并尝试从那里运行相同的包时,我收到一个错误,表明对该目录的访问被拒绝。

我一直认为,当我登录数据库并从Integration Services目录中执行SSIS包时,它使用了我的用户凭据,因此可以访问相关目录,因为我的用户配置文件具有访问它。

情况不是这样吗? SQL Server是否使用其他用户来执行IS目录中的包?是否可以选择 run as another user ?任何意见都将不胜感激。

3 个答案:

答案 0 :(得分:38)

包裹执行:

SQL Server数据工具:

运行 SQL Server Data Tools (SSDT) 的用户凭据将用于执行在SSDT中执行的程序包。

在Windows Start \ All Programs \ Microsoft SQL Server 2012下,如果单击SQL Server数据工具,它将在您的凭据下运行。要在不同的用户帐户下运行,您可以按 Ctrl + Shift 选择 Run as different user 选项。

Execute package from SSDT

集成目录服务:

右键单击 Integration Services Catalog \ SSISDB \ <Folder name> \ Projects \ <Project name> \ Packages \ <Package name> 下的软件包,然后选择Execute...运行软件包。该程序包将在用于连接到SQL Server Management Studio的凭据下运行。

请注意,如果您尝试使用SQL Server身份验证运行程序包,则会收到以下错误消息:

  

使用SQL Server身份验证的帐户无法启动该操作。使用使用Windows身份验证的帐户启动操作。

Execute

Execute...后,SQL Server会启动流程ISServerExec.exe,从而启动Console Window Host流程:

Under SSIS Catalog execution hood

ISServerExec.exe是一个在SSIS目录中执行包的程序。在这种情况下,它是在从SQL Server Management Studio执行SSIS包的同一用户下启动的。

没有代理的SQL Server代理作业:

SQL Server代理作业中运行SSIS包时,默认情况下作业步骤在 SQL Server Agent Service Account 下运行。可以通过导航到 Windows Start \ Administrative Tools \ Services 找到与SQL Server代理服务相关联的用户帐户,查找服务SQL Server代理(Your Instance Name)并找到下列出的用户帐户> Log On As

带代理的SQL Server代理作业:

您还可以通过创建代理帐户在不同凭据下运行SQL Server代理作业。在代理帐户下执行作业步骤时,作业步骤中的包将在代理帐户上指定的凭据下执行。

以下SO答案提供了创建代理帐户以运行SQL Server代理作业的逐步说明。

How do I create a step in my SQL Server Agent Job which will run my SSIS package?

如何验证:

样本SSIS 2012包:

以下是我针对用于执行包的用户帐户验证上述语句的方法。

  • 打开SQL Server数据工具并创建名为 SO_15289442.dtsx 的SSIS 2012包。

  • 创建一个名为ExecutionUser的数据类型为String的变量。将表达式@[System::UserName]分配给变量。 UserName 是一个系统变量,提供执行包的用户的信息。

  • 发送邮件任务拖放到数据流标签上。

  • 创建SMTP连接并将其分配给“发送邮件任务编辑器 - 邮件”页面上的 SmtpConnection

  • 指定 From To 电子邮件地址。

  • MessageSourceType 更改为 Variable

  • MessageSource 设置为 User::ExecutionUser

  • 右键单击该软件包,然后选择“部署”以将项目部署到您选择的服务器上可用的Integration Services目录。

包执行

  • 在SSDT中运行包。

  • 使用“以不同用户身份运行”选项打开SSDT。提供除您之外的其他凭据并再次运行该包。

  • 从Integration Services目录运行包。

  • 使用SQL Server代理服务帐户创建SQL Server代理作业以运行程序包。

  • 创建SQL Server代理作业以使用代理帐户运行包。

对于上述每次执行,您都会收到一封电子邮件,其中包含用于执行该程序包的用户帐户。

您的问题:

在您的情况下,如果右键单击并选择“从Integration Services目录执行”,则程序包将在您的帐户下执行(假设您使用凭据访问SSISDB )。确保该文件夹可以访问网络路径。

如果从SQL Server代理作业中运行包,则代理帐户是您正在查看的run as another user选项。

答案 1 :(得分:3)

听起来您没有在SQL Server上配置Kerberos(双跃点问题)。

以下是使用MS记录的问题,现已修复。 https://connect.microsoft.com/SQLServer/feedback/details/767088/with-the-new-ability-to-execute-ssis-packages-from-tsql-kerberos-delegation-should-be-supported

以下是关于此细节的精彩博文: http://www.sqlscientist.com/2014/01/setup-kerberos-authentication-for-sql.html

配置完成后,您应该可以使用本地计算机上的存储过程或SSMS远程启动作业。如果配置正确,它将通过您的凭据,当然您必须确保您具有访问网络资源的适当权限。

答案 2 :(得分:0)

这是一个旧线程,但我想你遇到的问题实际上是文件的路径。 您使用的是UNC名称还是驱动器号。也就是说,你的文件路径是“Z:\ path \ to \ file.csv”还是“\ server \ share \ path \ to \ file.csv”?

如果它是一个驱动器号,它可以正常工作,因为您已映射该驱动器,但由于未映射驱动器号,它将在服务器上失败。