无法使用SQL Server代理程序调度涉及链接服务器的任务

问题描述:

如何使计划任务有效?我想安排一个每晚运行查询的任务。查询正确解析并从服务器2上的SQL Server 2005数据库抓取数据,并将数据插入到server1上的数据库中的表中。查询和任务在server1上运行。无法使用SQL Server代理程序调度涉及链接服务器的任务

我能够在server1上的Microsoft SQL Server Management Studio中执行查询。使用SQL Server代理,我可以创建和计划作业来执行查询,但作业失败,并显示以下错误:以用户NT AUTHORITY \ SYSTEM身份执行。用户'NT AUTHORITY \ ANONYMOUS LOGON'登录失败[SQLSTATE 28000] [错误18456]。我公司的IT推测我需要将其添加到server2的交互式登录列表中,这是该策略的一部分。

我对服务器1和服务器2都有管理员权限,尽管后者应该没有必要。 server1和server2都使用Windows身份验证,我收集的是在安装SQL Server时设置的。

这是我做的。首先,我添加到服务器2 sys.sysservers server1上用下面的命令:
EXEC的sp_addlinkedserver @服务器=“服务器2”

然后创建于服务器1和服务器与登录之间的映射:EXEC sp_addlinkedsrvlogin @rmtsrvname =“服务器2” ,@useself ='true'

这使我可以在server1上的Microsoft SQL Server Management Studio中执行查询。有效。我发现好奇的是,虽然“命令成功完成”,但以下方法无效:

EXEC sp_addlinkedsrvlogin @rmtsrvname ='server2',@useself ='false',@locallogin ='MYDOMAIN \ MYNAME”,@rmtuser = 'MYNAME',@rmtpassword = '* ** * *'

(请注意,真正的密码是因为Windows身份验证的加密)。

我得到了错误 Msgg 18456,Level 14,State 1,Line 1 用户'myname'登录失败。

@useself = TRUE的值指定登录名使用他们自己的凭证连接到rmtsrvname,而忽略rmtuser和rmtpassword参数。 FALSE指定rmtuser和rmtpassword参数用于连接到指定的locallogin的rmtsrvname。我希望这两者都能工作,因为我为rmtuser和rmtpassword指定的内容正是我用来直接登录到远程服务器的内容。

作业始终以Sql Server代理服务中指定的用户身份执行。如果您的服务作为LocalSystem运行,那么你需要你的附加链接服务器登录名改为

EXEC sp_addlinkedsrvlogin @rmtsrvname = 'server2', @useself = 'false', @locallogin = 'NT AUTHORITY\SYSTEM', @rmtuser = 'myname', @rmtpassword = '*****' 

如果不是本地系统,然后指定的任何登录的代理在这个讨论中使用

寻找更多的信息http://www.sqlservercentral.com/Forums/Topic1003064-146-1.aspx#bm1003182