0

我有一个奇怪的场景,我目前无法解释。我生活在希望这只是“周五的感觉”,或者这里的某个善意的鞋底会拯救我的大脑,让我免于“但是为什么!?”的无休止循环。:)

两台服务器,运行 SQL Server 2005,DNS 条目为:

1. ServerA  
2. ServerB  

(嗯,他们不是真的这么叫,但它就足够了......)

在两个 SQL Server 实例上,都配置了指向另一台服务器的链接服务器。

出于明显的安全原因,LinkedServer Security 配置设置为:

- Be made using the login's current security context

其他“链接服务器选项”是...

Collation Compatible: True
Data Access:          True
RPC:                  True
RPC Out:              True
Use Remote Collation: True
Collation Name:       <blank>
Connection Timeout:   30
Command Timeout:      10

在两个实例上使用相同的密码创建登录名。登录名被授予对相关存储过程的适当执行权限。

我编写了一些代码,并在该登录名下执行它,一切正常


但是当我创建一个代理作业来运行这些存储过程时,一切都出错了。代理作业的所有者是“automated_job_login”,但我的错误日志显示如下: - 用户“automated_job_login”登录失败

(再一次,这个名字已经被改变以保护有罪的人。)


我一生都无法弄清楚为什么当我以该用户身份登录时它会起作用,但是连接到链接服务器时会出现作业错误。(肯定是在链接服务器连接点。)

为了让事情变得更加混乱,如果我将链接服务器安全配置更改为“使用此安全上下文:”并使用正确的密码指定“automated_job_login”,它可以正常工作。

我错过了一些东西,我知道我一定是,但我找不到什么。我已经阅读了文档,直到我的眼睛流血并且我失败了。请帮我 :)


[将链接服务器安全选项保留为“使用此安全上下文:”不是一个选项,因为这会给该服务器的所有用户提供对另一台服务器的不可接受的访问级别。]

4

1 回答 1

3

SQL 代理作业可能归您的登录名所有,但不会在该登录上下文中执行。它在SQL 代理服务帐户上下文中

因为您有 SQL Server 2005,所以您可以使用 EXEC AS USER = 'mylogin' 作为存储过程选项。

否则,您必须使用 的@database_user_name参数设置数据库用户名sp_add_jobstep在 SSMS中,您可以设置上下文。工作所有权与 IIRC 的设置略有不同。

于 2009-03-21T00:25:40.407 回答