SQL 代理 Powershell 作业因非管理员代理而失败

SQL 代理 Powershell 作业因非管理员代理而失败

我正在尝试创建一个 SQL Agent 作业,该作业将运行保存在我系统上的 PowerShell 脚本。但是,该作业失败并出现以下错误:

作业步骤在 PowerShell 脚本的第 1 行收到错误。对应行是“g:\PowerShellShare\Get-LastDBBackups.ps1”。更正脚本并重新安排作业。PowerShell 返回的错误信息是:“AuthorizationManager 检查失败。”

如果我将代理帐户添加到本地管理员,它就可以工作,因此它似乎是一个权限问题(对于我的环境来说,将帐户留在本地管理员中不是一个选择)。

每次运行该作业时,Windows 安全日志都会显示多个审核失败,事件 ID 为 4656,它们均来自尝试访问对象的代理帐户:

Object:
Object Server:      SC Manager
Object Type:        SERVICE OBJECT

快速sc sdshow scmanager表明已认证用户应该有 scmanager 的访问权限:

D:(A;;CCLCRPRC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

最令人费解的是,如果我在服务器上运行代理帐户并运行脚本,它会运行正常。无论我尝试通过 SQL 代理作业运行什么脚本,尝试执行任何脚本都会导致相同的行为。我但是运行其他 PowerShell 命令,只是不执行任何脚本。

希望有人曾经遇到过这个问题并能给我指明正确的方向。

更新:似乎主要的问题是,当我从 SQL 代理作业执行时,我的代理帐户不是交互的隐式安全组。当我使用 RUNAS 进行测试时,该组似乎授予代理成功运行作业所需的所有权限。我无法追踪该组允许的所有权限。

我所看到的审计失败是因为调用 WinHttpAutoProxySvc加密服务服务。我使用 sc sdshow 和 sc sdset 修改了这些特定服务的权限,以便已认证用户权限与互动用户组。审计失败现在已消失,但当我执行该作业时,我仍然在 SQL 中收到相同的错误消息。

答案1

检查 Powershell 中的执行策略;听起来它可能失败了,因为默认设置是“受限”,它仅允许 Powershell 作为交互式 shell 运行,并且根本不执行脚本。有关详细信息,请参阅以下链接:

http://technet.microsoft.com/en-us/library/ee176961.aspx

编辑:刚刚意识到上面的链接只描述了“Set-ExecutionPolicy”的语法;这个链接还应该提供一些额外的上下文:

http://technet.microsoft.com/en-us/library/ee176949.aspx

答案2

我知道这个帖子有点旧了。我在对 powershell 代理作业进行故障排除时发现了这一点。我认为它在代理作业中引用的 powershell 是 SQL 的 powershell。您需要通过右键单击 SSMS 中的某个内容并选择启动 powershell 来设置该执行策略。

我以 powershell 身份运行作业时出现此错误。如果我将作业设为操作系统 (CMD) 作业,则它通过以下命令启动脚本:powershell.exe -File D:\Script Folder\myscript.ps1

相关内容