我在SQL Server代理中设置了一个T-SQL作业,每周运行一次。在SQL Server Management Studio中,我能够成功地将脚本作为查询运行,但是当作业运行时,它会出错:
“以用户身份执行:DOMAIN \ user。用户没有权限 执行此操作。 [SQLSTATE 42000](错误15247)。这一步 失败“。
脚本从一个SQL服务器导出表数据并将其转储到另一个链接服务器。根据我收集的内容,T-SQL不使用代理和凭据,它在执行脚本时使用所有者登录我在两个数据库上都是db_owner,在两个服务器上都是sysadmin和serveradmin,我缺少什么?
答案 0 :(得分:3)
有关SQL Server代理用户上下文的服务器端(而非数据库安全性)的安全要求,请参阅this page。 SQL代理是一个外部进程,分配了一个Windows帐户以在其下运行,该帐户必须位于数据库实例上的sysadmin组中。
答案 1 :(得分:1)
感谢大家的帮助,您的建议引导我找到解决方案。为了让它工作,我的域名登录是作业的所有者。在高级下的步骤属性中,我将“作为用户运行”留空,然后将“EXEC AS LOGIN ='DOMAIN \ user'”添加到T-SQL脚本中并且它有效!
答案 2 :(得分:1)
这是一个古老的问题,但我找到了一个答案,所以只是为了帮助加强它,以防其他任何人遇到这个问题......
Chad的解决方案是唯一对我有用的解决方案。将作业步骤属性高级选项卡中的“以用户身份运行”框保留为空白,并将“EXEC AS LOGIN ='DOMAIN \ user'”添加到T-SQL脚本中。我还必须确保将“DOMAIN \ user”帐户添加到SQL Server实例中作为具有有效/必要角色的登录。