我有一个名为 @test_credentials 的工作,它运行以下查询
select * from openquery(SERVER2,
'select USER_NAME(),* from openquery(SERVER1,''SELECT USER_NAME() '')')
并将这些结果输出到文件中。
作业“@test_credentials”:第 1 步,“test_credentials”:开始执行 2015-08-31 17:53:45
来宾LinkedServerUser
(1 行受影响)
SERVER1
两者的链接服务器定义SERVER2
都使用 linkedserveruser 登录彼此(安全上下文选项)。- 两个链接服务器定义都使用相同的选项定义
- linkedserveruser 用户帐户存在于两台服务器上,并且无论如何都没有被禁用。
SERVER1
运行 AGENT 的服务帐户对于和都是相同的SERVER2
。
所以我的问题是:
为什么 SQL Server Agent 在执行此作业时以访客身份登录到 SERVER2?
我个人会尝试使用 ORIGINAL_LOGIN() 而不是 USER_NAME()。 USER_NAME() 返回与您正在连接的数据库中的登录关联的数据库主体或用户。在这种情况下,您可能
master
在两种情况下都连接到。如果 LinkedServerUser 没有特定的登录名,master
那么SERVER2
您将看到GUEST
。另一方面,如果您使用
ORIGINAL_LOGIN()
,您将获得连接的服务器主体,在这两种情况下都可能是 LinkedServerUser。