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