36

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

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

不是这样吗?SQL Server 是否使用不同的用户来执行 IS 目录中的包?有选择run as another user吗?任何输入将不胜感激。

4

3 回答 3

51

包执行:

SQL Server 数据工具:

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

在 Windows 开始\所有程序\Microsoft SQL Server 2012 下,如果您单击 SQL Server Data Tools,它将在您的凭据下运行。要在不同的用户帐户下运行,您可以按Ctrl+Shift选择Run as different user选项。

从 SSDT 执行包

集成目录服务:

当您右键单击下面的包Integration Services Catalog \ SSISDB \ <Folder name> \ Projects \ <Project name> \ Packages \ <Package name>并选择Execute...运行包时。该包将在用于连接到 SQL Server Management Studio 的凭据下运行。

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

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

执行

按 后Execute...SQL Server旋转一个进程ISServerExec.exe,启动一个Console Window Host进程:

在 SSIS 目录执行引擎下

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

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

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

使用代理的 SQL Server 代理作业:

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

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

如何在我的 SQL Server 代理作业中创建一个将运行我的 SSIS 包的步骤?

如何验证:

示例 SSIS 2012 包:

这是我为验证上述关于用于包执行的用户帐户所做的陈述。

  • 打开 SQL Server Data Tools 并创建名为SO_15289442.dtsx.

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

  • 将发送邮件任务拖放到数据流选项卡上。

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

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

  • 将MessageSourceType更改为Variable.

  • 设置MessageSourceUser::ExecutionUser

  • 右键单击包并选择部署以将项目部署到您选择的服务器上可用的集成服务目录。

包执行

  • 在 SSDT 中运行包。

  • 使用 Run as different user 选项打开 SSDT。提供与您不同的凭据并再次运行该程序包。

  • 从集成服务目录运行包。

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

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

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

您的问题:

在您的情况下,如果您右键单击并选择从集成服务目录执行,该包将在您的帐户下执行(假设您使用您的凭据访问 SSISDB )。确保该帐户有权访问网络路径。

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

于 2013-03-08T14:12:29.260 回答
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 远程启动作业。如果配置正确,它将传递您的凭据,当然您必须确保您具有访问网络资源的适当权限。

于 2014-12-03T17:59:19.843 回答
0

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

如果它是驱动器号,它会在您的本地计算机上正常工作,因为您已映射该驱动器,但由于驱动器号未映射,它将在服务器上失败。

于 2017-07-12T17:04:29.850 回答