我在 SQL 2008 服务器(服务器 A)上有一份工作(我知道这并不理想……这个问题正在解决中)。代理在 NT AUTHORITY\NETWORK SERVICE 下运行。
我想添加一个步骤来运行位于另一台 SQL 2014 服务器(服务器 B)上的作业。
我会使用:
EXEC [Server B].msdb..sp_start_job N'JobName'
从服务器 A 手动运行,它按预期在服务器 B 上执行作业。
如果我将任务添加到服务器 A 上的作业,则会失败并显示以下消息:
以用户身份执行:NT AUTHORITY\NETWORK SERVICE。对象“sp_start_job”、数据库“msdb”、模式“dbo”的执行权限被拒绝。[SQLSTATE 42000](错误 229)。步骤失败。
我已将服务器 B 上的 NT AUTHORITY\NETWORK SERVICE 分配给 msdb 中的“TargetServerRole”,然后授予执行权限以关注用户对 SP_Start_Job 和 SP_Stop_Job。
服务器 A 将服务器 B 作为链接服务器,我尝试将“本地服务器登录到远程服务器登录映射”设置为本地登录 NT AUTHORITY\NETWORK SERVICE 来模拟。
该作业仍然失败并出现相同的错误。
我需要做什么?
谢谢
您可能不想授予对或的直接访问权限
sp_start_job
,或者甚至不希望通过,sp_stop_job
授予对一系列 SQL 代理功能的访问权限或。至少,执行这些组合中的任何一个都将允许在 ServerA 上运行的任何进程能够启动和/或停止 ServerB 上的任何作业。SQLAgentOperatorRole
NT AUTHORITY\NETWORK SERVICE
MyDomain\ServerA$
NT AUTHORITY\NETWORK SERVICE
使用Module Signing,您可以设置非常精细的权限,以便
MyDomain\ServerA$
(或任何登录名或角色,或它们的任何组合)只能启动和停止该特定作业。现在你需要做的就是:
NT AUTHORITY\NETWORK SERVICE
, 是一个本地帐户,但它可以使用服务器的计算机帐户在网络上进行身份验证(假设服务器已加入域)。您需要在服务器 B 上为服务器 A 的计算机帐户创建一个登录。
例如,如果服务器 A 的计算机名称是“ServerA”,那么它的计算机帐户名为“ServerA$”,如下所示: