我试图让SQL Server Agent运行带参数的程序(作为操作系统CmdExec作业步骤),但每次运行作业时我都会收到以下错误:无法为作业的第1步创建进程,原因:访问被拒绝)。
我在网上做的研究表明,这可能是一个权限问题。我在Windows中设置了一个新用户帐户,并为我想要运行的程序授予了它完全权限,然后将此用户配置文件映射到MS SQL中的SQLSERVERAGENT配置文件,但我仍然收到此错误。
对此有任何帮助将不胜感激。
答案 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
答案 3 :(得分:0)
收到相同的错误消息。事实证明,SQL代理帐户没有sqlcmd.exe所在的Tools目录的权限。 Gave Read&执行SQL代理帐户的权限,问题解决了。
答案 4 :(得分:-2)
我们需要确保执行作业所使用的帐户对作业步骤中涉及的文件夹/文档具有完全访问权限。
这应该可以解决此问题,而无需添加代理。