Permissões do sistema proxy MSSQL necessárias para executar etapas do PowerShell

1

Eu comecei a perguntar isso no DBA do StackExchange, mas decidi que provavelmente seria mais um tipo de pergunta de segurança do Windows Server.

SQL Server 2016 SP1 + CU no servidor 2012 R2.

Estou tentando executar uma etapa do PowerShell em um trabalho do SQL Agent usando um usuário proxy e estou tendo problemas com o SQL tentando fazer manutenção antes de executar qualquer código.

Portanto, o usuário proxy está incluído no subsistema do SQL Agent PowerShell. Eu posso fazer um trabalho de amostra com apenas um passo, para executar "Get-Date". Os erros do trabalho:

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 e LocalMachine são todos configurados no RemoteSigned, portanto, não é como se houvesse um problema de escopo, e isso produziria um erro diferente de qualquer maneira.

Se eu colocar o usuário proxy em administradores locais na máquina, o problema desaparece e o script é executado normalmente. Eu vejo esse acesso nos logs de segurança do Windows no sistema:

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

Parece que é basicamente o mesmo problema que o @MaddHatter teve há quatro anos neste link:

Falha no trabalho do SQL Agent Powershell com proxy não-administrador

A única opção é colocar esse usuário em administradores locais? Parece uma abordagem bastante hamfisted para o problema. Como posso adaptar melhor as permissões para esses usuários proxy para que o trabalho possa ser executado?

    
por Drew Lanclos 23.02.2017 / 17:25

1 resposta

1

Você pode tentar ver o que está acontecendo com o processo SQLAgent (ou talvez powershell) usando o Sysinternals Process Monitor:
link
Com essa ferramenta, você poderá ver de onde vem o "Acesso negado".

Outra opção seria usar uma etapa "Sistema Operacional (CmdExec)" em vez de powershell e chamar o script powershell assim:

powershell.exe -File "C:\Path\To\File.ps"
    
por 26.02.2017 / 22:46