我的服务器设置有点奇怪。我的一位数据库管理员向我的服务器添加了一个链接服务器。在链接服务器属性中,我在安全视图中看到以下内容:
Local server login to remote server login mappings:
Local Login Impersonate Remote User Remote Password
domain\myusername CHECKED
For a login not defined in the list above, connections will:
- Be made using the security context
Remote login: linkedserveruser
With password: **************
因此,当我使用以下内容创建存储过程时:
SELECT *
INTO #TEMP
FROM LINKEDSERVERNAME.DBName.dbo.TableName
-- Update local table after processing #TEMP
并设置了一个 SQL 作业,它失败并显示以下消息:
Message
Executed as user: NT AUTHORITY\NETWORK SERVICE. Login failed for user 'linkedserveruser'. [SQLSTATE 28000] (Error 18456). The step failed.
之后,我翻阅了文档,发现了一篇解释这个问题的KB811031文章,并建议我映射安全上下文并将作业作为 osql 运行。
我不必映射安全上下文,因为(从上面链接服务器的设置中可以看出)它已经被映射了。我按照建议将类型更改为操作系统命令。当我现在运行作业时,我收到以下消息:
Executed as user: domain\MYMACHINENAME$. Msg 18456, Level 14, State 1, Server SOMEOTHERDATABASENAME, Line 1 Login failed for user 'linkedserveruser'. Process Exit Code 0. The step succeeded.
事实上,这项工作失败了,它会退出报告成功。关于如何让这种类型的存储过程包含对链接服务器的查询以作为 SQL 作业运行的任何建议?