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

Ryg*_*guy 5 sql-server sql-server-agent

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

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

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

小智 5

以上步骤对我有用

Enable XP_cmdshell
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
GO
Run Code Online (Sandbox Code Playgroud)

创建凭证

CREATE CREDENTIAL cmdshell_agent WITH IDENTITY = 'account_name', SECRET = 'password';
GO
Run Code Online (Sandbox Code Playgroud)

创建代理

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
Run Code Online (Sandbox Code Playgroud)

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


小智 1

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

exec sp_configure 'xp_cmdshell',1
go
reconfigure
Run Code Online (Sandbox Code Playgroud)
  1. 您需要使用您创建的用户创建凭据。
  2. 创建引用您创建的凭据的代理。授予此代理对“操作系统(CmdExec)”子系统的访问权限。
  3. 在作业步骤本身中,确保它作为此代理执行(运行方式:)。