在SQL Server代理中运行作业时出现“拒绝访问”错误

时间:2014-06-24 19:22:24

标签: sql-server sql-server-agent

我试图让SQL Server Agent运行带参数的程序(作为操作系统CmdExec作业步骤),但每次运行作业时我都会收到以下错误:无法为作业的第1步创建进程,原因:访问被拒绝)。

我在网上做的研究表明,这可能是一个权限问题。我在Windows中设置了一个新用户帐户,并为我想要运行的程序授予了它完全权限,然后将此用户配置文件映射到MS SQL中的SQLSERVERAGENT配置文件,但我仍然收到此错误。

对此有任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:3)

以上步骤对我有用

Enable XP_cmdshell
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO

创建凭据

CREATE CREDENTIAL cmdshell_agent WITH IDENTITY = 'account_name', SECRET = 'password';
GO

创建代理

USE [msdb]
GO
EXEC msdb.dbo.sp_add_proxy @proxy_name=N'tst_Proxy',@credential_name=N'cmdshell_agent', @enabled=1
GO
EXEC msdb.dbo.sp_grant_proxy_to_subsystem @proxy_name=N'tst_Proxy', @subsystem_id=3
GO

之后在sql代理作业中使用tst_proxy来运行作业。工作成功了

答案 1 :(得分:1)

我遇到了同样的问题,解决方案非常简单:我的.exe路径已关闭。这有点令人困惑,这反映为“拒绝访问”错误(因为代理帐户并不真正知道该文件不存在,只是它无法访问此类文件)。

故障排除时可以采取的一个简单步骤是在命令窗口中运行exact命令。它是否按预期工作?如果您使用代理帐户登录怎么样?

答案 2 :(得分:0)

首先,您需要确保允许使用XP_CMDSHELL。

exec sp_configure 'xp_cmdshell',1
go
reconfigure
  1. 您需要与您创建的用户一起创建凭据。
  2. 创建引用您创建的凭据的代理。授予此代理访问权限的操作系统(CmdExec)" subsytem。
  3. 在作业步骤中,确保它作为此代理执行(运行方式:)。

答案 3 :(得分:0)

收到相同的错误消息。事实证明,SQL代理帐户没有sqlcmd.exe所在的Tools目录的权限。 Gave Read&执行SQL代理帐户的权限,问题解决了。

答案 4 :(得分:-2)

我们需要确保执行作业所使用的帐户对作业步骤中涉及的文件夹/文档具有完全访问权限。

这应该可以解决此问题,而无需添加代理。