SQL Server代理作业执行SSIS包失败,如果手动运行包成功

我在SQL服务器上安装了一个SSIS包(SQL Server 2012)。 它非常简单,只是从远程数据源提取数据并将其添加到本地表中。 远程连接string正在使用SQL Server身份validation,而本地连接正在使用Windows身份validation。 远程连接密码受到保护,导入软件包时将保护级别设置为依赖服务器存储和angular色进行访问控制

如果我手动运行SSIS包,它工作。 如果我使用dtexec从命令行运行它,它的工作原理。 如果我使用runas切换到运行SQL Server代理的域帐户,然后使用dtexec运行该程序包,则可以使用它。 如果我用一个步骤创build一个SQL代理作业来运行该程序包,那么它会失败,并提供很less的细节。 我猜这是无法获得密码login到远程SQL服务器,因为它失败很快。 此外,如果我勾选“login到表”并查看结果文件,我得到以下内容:

 Description: ADO NET Source has failed to acquire the connection {0D8F2CD4-A763-4AEB-8B52-B8FAE0621ED3} with the following error message: "Login failed for user 'username'.". 

如果我尝试在作业步骤对话框中的data sources下手动添加连接string中的密码,它拒绝保存它,总是看似删除连接string的“密码”位。

我认为SQL服务器代理作业总是在SQL服务器代理正在运行的帐户的上下文下运行。 此帐户是本地SQL服务器上的sysadmin ,并且该软件包使用该帐户下的dtexec工作,所以为什么在尝试以代理作业运行时会失败?

我有同样的问题。 经过一些研究和说服服务器,我没有控制,以添加一个Windows身份validation帐户的位置和从下面的URL一些洞察力,我得到它的工作:

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/3f51de7b-52c2-471e-811b-d056f707f5bd/what-is-the-difference-between-job-owner-run-as-and-login上到该服务器,acounts手续?论坛= sqlintegrationservices

我们的环境

  • SQL Server 2012托pipe集成服务目录,它将来自不同SQL Server版本的数据汇集到不同的域中。
  • 两个互相信任的领域
    • 域A
      • 域A中的SSIS目录,域A上运行SSIS包的SQL Server代理作业
    • 域B
      • SSIS包使用SSIS包中的Windows身份validation连接设置从域B上的数据库中提取数据。 包运行良好。
      • 一个属于域B的服务帐户可以访问所有有问题的数据源。

这让我了解了他们如何运行SQL Server代理作业的差异。 鉴于我的SSIS软件包正在向远程服务器提供不同的域名,而且我的错误与此步骤中的“运行方式”用户帐户有关,所以我决定创build另一个“运行方式”帐户。 这也被称为代理(SQL Server代理>代理> SSIS包执行)。

在创build代理之前,我必须设置一个凭证。 这里为我解决这个问题的步骤:

所有步骤都假设您的SSIS包已加载到Integration Services目录中,并且创buildSQL Server代理作业的步骤是从SSIS目录(包源代码)运行包。

  1. 创build一个凭证(安全>凭证)。 将凭证中的身份用作上述的服务帐户。
  2. 创build一个SSIS包执行代理(SQL Server代理>代理> SSIS包执行)。 为了帮助理解所有内容,我给了它与服务帐户相同的名称。
  3. 转到SQL Server代理作业,然后执行该步骤。 将运行从SQL Server代理服务帐户更改为您新创build的代理帐户。 按下OK并确定。
  4. 运行作业来testing。

这适用于我们的情况,并允许我们的SSIS包按计划运行,并遍历一个域到另一个SQL Server框并提取数据。

如果您只能使用Windows身份validation而不是SQL身份validation,则通常会更容易。