【问题标题】:Access Denied error when running job in SQL Server Agent在 SQL Server 代理中运行作业时访问被拒绝错误
【发布时间】:2014-06-24 19:22:23
【问题描述】:

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

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

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

【问题讨论】:

  • 你是如何“运行”程序的? xp_cmdshell?作业步骤(操作系统 CmdExec、PowerShell 等)?其他方法?
  • 是的,我将它作为操作系统 CmdExec 运行
  • 重新配置登录账号后是否重启了SQL Agent?
  • 是的,我做了,仍然有错误。
  • 该工作的所有者是谁?南非?

标签: sql-server sql-server-agent


【解决方案1】:

以上步骤对我有用

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 来运行该作业。作业运行成功

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        收到相同的错误消息。原来是SQL Agent账号对sqlcmd.exe所在的Tools目录没有权限。授予 SQL 代理帐户读取和执行权限,问题已解决。

        【讨论】:

          【解决方案5】:

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

          这应该可以在不添加代理的情况下解决问题。

          【讨论】:

            猜你喜欢
            • 2016-10-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-07-16
            相关资源
            最近更新 更多