使用SQL Server代理调度涉及链接服务器的任务失败

时间:2013-02-21 02:36:34

标签: linked-server

如何使计划任务有效?我想安排一个每晚运行查询的任务。查询正确解析并基本上从server2上的SQL Server 2005数据库中获取数据,并将数据插入到server1上的数据库中的表中。查询和任务在server1上运行。

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

我在server1和server2上都有Admin权限,但我认为后者不应该是必需的。 server1和server2都使用Windows身份验证,我收集的是在安装SQL Server时设置的。

这就是我所做的。首先,我使用以下命令将server2添加到server1上的sys.sysservers:
EXEC sp_addlinkedserver @ server ='server2'

然后我在server1和server2上的登录之间创建了一个映射:EXEC sp_addlinkedsrvlogin @rmtsrvname ='server2',@ useself ='true'

这使我能够在server1上的Microsoft SQL Server Management Studio中执行查询。有效。我发现很奇怪的是,虽然“命令已成功完成”,但以下情况仍无效:

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

(请注意,由于Windows身份验证,实际密码未加密。)。

我收到了错误 信息18456,第14级,状态1,第1行 用户'myname'登录失败。

值@useself = TRUE指定登录使用自己的凭据连接到rmtsrvname,并忽略rmtuser和rmtpassword参数。 FALSE指定rmtuser和rmtpassword参数用于连接指定locallogin的rmtsrvname。我本来期望两者都能工作,因为我为rmtuser和rmtpassword指定的正是我用来直接登录到远程服务器的东西。

1 个答案:

答案 0 :(得分:0)

作业始终以Sql Server Agent服务中指定的用户身份执行。如果您的服务作为LocalSystem运行,则需要将添加链接服务器登录名更改为

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

如果不是localsystem,则指定代理中使用的任何登录

请查看此讨论以获取更多信息http://www.sqlservercentral.com/Forums/Topic1003064-146-1.aspx#bm1003182