SQL Job步骤作为其他SQL帐户运行


11

我很好奇如何设置要作为其他SQL登录帐户执行的SQL作业步骤。看来我需要设置一个需要现有凭据的新代理帐户。创建凭据时,我唯一的选择是使用Windows登录凭据。

我尝试运行的作业如下。还有其他一些语句,但是当我将作业步骤设置为以SQL登录名运行时,它将失败。

insert into [dbo].[TableA]
SELECT 
       ss.[Ref_ID]
      ,mm.[studentID]
      ,mm.[studentPersonID]
      ,mm.[studentFirstname]
  FROM [dbo].[TableB] mm
  left outer join [dbo].[TableC] ss on ss.parentPersonID=mm.parentPersonID and mm.studentPersonID = ss.studentPersonID
  where ss.Ref_ID is not null;

通过SQL作业步骤运行此命令时,它将失败。

Executed as user: an_admin_account. Access to the remote server is denied because the current security context is not trusted. [SQLSTATE 42000] (Error 15274).  The step failed.

当所有这些表都存在于本地数据库中时,我不清楚它为什么要尝试访问远程服务器。


SQL作业步骤已与SQL实例建立连接。因此,您需要更改现有的安全上下文,而不是使用密码进行新连接。如果要创建新连接,可以使用sqlcmd命令或PowerShell脚本,然后可以在脚本中使用SQL登录名和密码作为参数。但是,您应该考虑需要做什么,以及具有其自身上下文的存储过程是否足够。
罗布·法利

Answers:


15

如果要配置T-SQL作业步骤,请转到“高级”页面,然后将“以用户身份运行”配置为您选择的登录名。 在此处输入图片说明

如果您正在使用其他作业步骤类型(如PowerShell),则将需要配置代理帐户。


我已经尝试过了,但是现在工作失败,提示“由于不信任当前的安全上下文而拒绝访问远程服务器”。但是,如果我以用户身份登录时运行脚本,则可以正常运行。查询中没有链接服务器,因此我不明白为什么它指的是远程服务器。有什么想法吗?
Geoff Dawdy 2014年

如果您可以将问题添加到您的工作中,而确切的错误将帮助我们为您提供解决方案。

就我而言,它忽略了设置。使用SQL 2012
米格尔SV

1

首先使用EXECUTE AS,或创建一个在特定上下文中执行的存储过程。


这可能是不好的。如果要使用受限用户调用存储过程,则可能永远无法获得sysadmin(或作业所有者)特权。解决方法是使用Cookie。
詹斯·W

使用EXECUTE AS选项创建的存储过程将处理特权升级,并且不允许某人进行更改。如果没有可用的存储过程,那么模拟其他登录名即可解决问题,就像在脚本开头使用EXECUTE AS一样。
罗伯·法利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.