如何使计划任务有效?我想安排一个每晚运行查询的任务。查询正确解析并基本上从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指定的正是我用来直接登录到远程服务器的东西。
答案 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