Я начал задавать этот вопрос администратору баз данных StackExchange, но решил, что это, вероятно, будет скорее вопрос безопасности Windows Server.
SQL Server 2016 SP1 + CU на Server 2012 R2.
Я пытаюсь выполнить шаг PowerShell в задании агента SQL с использованием прокси-пользователя, и у меня возникает проблема с SQL, пытающимся выполнить уборку перед выполнением любого кода.
Итак, прокси-пользователь включен в подсистему SQL Agent PowerShell. Я могу сделать образец задания всего за один шаг, чтобы запустить «Get-Date». Ошибки работы:
Executed as user: Domain\ProxyUser. A job step received an error at line 1 in a PowerShell script. The corresponding line is 'set-executionpolicy RemoteSigned -scope process -Force'. Correct the script and reschedule the job. The error information returned by PowerShell is: 'Access denied '. Process Exit Code -1. The step failed.
MachinePolicy, UserPolicy и LocalMachine имеют значение RemoteSigned, поэтому не похоже, что существует проблема с областью действия, которая в любом случае приведет к другой ошибке.
Если я помещу прокси-пользователя в локальных администраторов на машине, проблема исчезнет, и сценарий будет работать нормально. Я вижу этот доступ в журналах безопасности Windows в системе:
Object:
Object Server: Security
Object Type: File
Object Name: \Device\ConDrv
Object Handle: 0x4
Process Information:
Process ID: 0x6350
Process Name: C:\Windows\System32\conhost.exe
Requested Operation:
Desired Access: DELETE
READ_CONTROL
WRITE_DAC
WRITE_OWNER
SYNCHRONIZE
ReadData (or ListDirectory)
WriteData (or AddFile)
AppendData (or AddSubdirectory or CreatePipeInstance)
ReadEA
WriteEA
Execute/Traverse
DeleteChild
ReadAttributes
WriteAttributes
Privileges: SeTakeOwnershipPrivilege
Похоже, это в основном та же проблема, что и у @MaddHatter четыре года назад по этой ссылке:
Сбой задания Powershell агента SQL с прокси без прав администратора
Единственный выбор - поместить этого пользователя в список локальных администраторов? Похоже, подход к проблеме довольно неуклюжий. Как мне лучше всего настроить разрешения для этих прокси-пользователей, чтобы задание могло выполняться?
Вы можете попытаться увидеть, что происходит с процессом SQLAgent (или, возможно, PowerShell), используя Sysinternals Process Monitor:
https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx
С помощью этого инструмента вы сможете увидеть, откуда приходит сообщение «Доступ запрещен».
Другой вариант - использовать шаг «Операционная система (CmdExec)» вместо powershell и вызвать сценарий powershell следующим образом:
powershell.exe -File "C:\Path\To\File.ps"