我的服务器设置有点奇怪。我的一个数据库管理员向我的服务器添加了一个链接服务器。在链接的服务器属性中,我在安全性视图中看到以下内容:
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身份运行该作业。
我没有映射安全上下文,因为(正如您从上面链接服务器的设置中看到的那样),它已经被映射了。我按照建议将Type更改为Operating System Command。当我现在运行工作时,我收到以下消息:
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作业运行的任何建议?