Sql server T-SQL Server代理作业失败“;“用户没有执行此操作的权限”;

Sql server T-SQL Server代理作业失败“;“用户没有执行此操作的权限”;,sql-server,Sql Server,我在SQLServer代理中设置了一个每周运行的T-SQL作业。在SQL Server Management Studio中,我可以将脚本作为查询成功运行,但当作业运行时,它会出错,并显示: “以用户身份执行:域\用户。用户没有访问的权限。” 执行此操作。[SQLSTATE 42000](错误15247)。步骤 失败了。” 该脚本正在从一个SQL server导出表数据,并将其转储到另一个链接服务器中。从我收集到的信息来看,T-SQL不使用代理和凭据,在两台数据库上执行脚本I am db_own

我在SQLServer代理中设置了一个每周运行的T-SQL作业。在SQL Server Management Studio中,我可以将脚本作为查询成功运行,但当作业运行时,它会出错,并显示:

“以用户身份执行:域\用户。用户没有访问的权限。” 执行此操作。[SQLSTATE 42000](错误15247)。步骤 失败了。”


该脚本正在从一个SQL server导出表数据,并将其转储到另一个链接服务器中。从我收集到的信息来看,T-SQL不使用代理和凭据,在两台数据库上执行脚本I am db_owner时,它使用所有者登录,在两台服务器上执行脚本I am db_owner,在两台服务器上执行脚本sysadmin和serveradmin时,我缺少什么?

请查看有关SQL server代理用户上下文的服务器端安全要求(而非数据库安全性)。SQL Agent是一个外部进程,它被分配了一个Windows帐户以在其下运行,该帐户必须位于数据库实例的sysadmin组中。请参阅有关SQL server Agent用户上下文的服务器端安全要求(非数据库安全性)。SQL代理是一个外部进程,它被分配了一个Windows帐户以在其下运行,该帐户必须位于数据库实例的sysadmin组中。除其他外。

感谢大家的帮助,您的建议引导我找到了一个解决方案。为了让它工作,我的域登录名是作业的所有者。在“高级”下的步骤属性中,我将“以用户身份运行”保留为空,然后在T-SQL脚本中添加了“EXEC as LOGIN='DOMAIN\user'”,它成功了

谢谢大家的帮助,你的建议引导我找到了解决方案。为了让它工作,我的域登录名是作业的所有者。在“高级”下的步骤属性中,我将“以用户身份运行”保留为空,然后在T-SQL脚本中添加了“EXEC as LOGIN='DOMAIN\user'”,它成功了

这是一个老问题,但我花了很长时间才找到答案,所以为了帮助强化它,以防其他人遇到这个问题


查德的解决方案也是唯一对我有效的解决方案。将“作业步骤属性”“高级”选项卡中的“以用户身份运行”框留空,并将“EXEC as LOGIN='DOMAIN\user'”添加到T-SQL脚本中。我还必须确保已将“域\用户”帐户添加到SQL Server实例中,作为具有有效/必要角色的登录名。

这是一个老问题,但我花了很长时间才找到答案,所以为了帮助加强它,以防其他人遇到此问题


查德的解决方案也是唯一对我有效的解决方案。将“作业步骤属性”“高级”选项卡中的“以用户身份运行”框留空,并将“EXEC as LOGIN='DOMAIN\user'”添加到T-SQL脚本中。我还必须确保已将“域\用户”帐户添加到SQL Server实例中,作为具有有效/必要角色的登录名。

设置作业运行的用户是什么?要找到它,您需要转到general->Owner。它将位于作业的属性中。所有者设置为我的网络登录名。因此,在上述错误中,出于安全原因,我将网络登录名替换为域\用户。请尝试将作业所有者更改为
sa
。很可能您的登录名没有(也可能不应该)运行作业等功能。在作业步骤属性->高级->以用户身份运行中,这是否应该保留?如果此项留空,并且我使用“sa”作为所有者,则会出现以下错误“以用户身份执行:NT AUTHORITY\NETWORK SERVICE。用户“域\服务器$”登录失败。[SQLSTATE 28000](错误18456)。该步骤失败。“作业设置为以什么用户身份运行?”?要找到它,您需要转到general->Owner。它将位于作业的属性中。所有者设置为我的网络登录名。因此,在上述错误中,出于安全原因,我将网络登录名替换为域\用户。请尝试将作业所有者更改为
sa
。很可能您的登录名没有(也可能不应该)运行作业等功能。在作业步骤属性->高级->以用户身份运行中,这是否应该保留?如果此项留空,并且我使用“sa”作为所有者,则会出现以下错误“以用户身份执行:NT AUTHORITY\NETWORK SERVICE。用户“域\服务器$”登录失败。[SQLSTATE 28000](错误18456)。该步骤失败。”我按照这些步骤将我的域用户名添加到SQL server本地安全策略-作为服务登录(SeServiceLogonRight)-替换进程级令牌(SeAssignPrimaryTokenPrivilege)-绕过遍历检查(SeChangeNotifyPrivilege)-调整进程的内存配额(SeIncreaseQuotaPrivilege),但仍有相同的错误…尝试将SQL代理进程运行的用户上下文更改为内置的
NT AUTHORITY\System
帐户。SQL代理进程不应在您的帐户下运行(尽管您的SQL代理作业可以根据需要运行)。我按照这些步骤将我的域用户名添加到SQL Server本地安全策略-作为服务登录(SeServiceLogonRight)-替换进程级令牌(SeAssignPrimaryTokenPrivilege)-绕过遍历检查(SeChangeNotifyPrivilege)-调整进程的内存配额(SeIncreaseQuotaPrivilege),但仍有相同的错误…尝试将SQL代理进程运行的用户上下文更改为内置的
NT AUTHORITY\System
帐户。SQL代理进程不应在您的帐户下运行(尽管您的SQL代理作业可以根据需要运行)。