1

如何使计划任务工作?我想安排一个每晚运行查询的任务。该查询正确解析,基本上从 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 上都有管理员权限,尽管我认为后者不是必需的。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 指定的内容正是我用来直接登录到远程服务器的内容。

4

1 回答 1

0

该作业始终以 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

于 2013-03-06T00:01:29.007 回答