我在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代理作业的差异。 鉴于我的SSIS软件包正在向远程服务器提供不同的域名,而且我的错误与此步骤中的“运行方式”用户帐户有关,所以我决定创build另一个“运行方式”帐户。 这也被称为代理(SQL Server代理>代理> SSIS包执行)。
在创build代理之前,我必须设置一个凭证。 这里为我解决这个问题的步骤:
所有步骤都假设您的SSIS包已加载到Integration Services目录中,并且创buildSQL Server代理作业的步骤是从SSIS目录(包源代码)运行包。
这适用于我们的情况,并允许我们的SSIS包按计划运行,并遍历一个域到另一个SQL Server框并提取数据。
如果您只能使用Windows身份validation而不是SQL身份validation,则通常会更容易。