Probema con la cuenta proxy ##xp_cmdshell_proxy_account## al ejecutar xp_cmdshell

Luego de habilitar la ejecución del xp_cmdshell en la configuración del SQL Server, si queremos ejecutarlo sin pertenecer al rol sysadmin, probablemente tengamos que realizar algunos cambios para evitar el siguiente error:

Msg 15121, Level 16, State 200, Procedure xp_cmdshell, Line 1 [Batch Start Line 0]

An error occurred during the execution of xp_cmdshell. A call to ‘LogonUserW’ failed with error code: ‘1385’.

Ocurrió un error durante la ejecución de xp_cmdshell. Una llamada a ‘LogonUserW’ falló con el código de error: ‘1385’

La diferencia de ser un sysadmin

Se nos pueden presentar dos alternativas con respecto a los permisos de quien va a ejecutar el xp_cmdshell:

El usuario tiene el rol de servidor sysadmin
Si el usuario es sysadmin el SQL Server utiliza la cuenta del servicio para ejecutar el comando indicado como parámetro en el xp_cmdshell, y esta cuenta ya tiene los permisos adecuados.

El usuario NO tiene el rol de servidor sysadmin
Para permitir que estos usuarios puedan ejecutar el xp_cmdshell, es necesario que primero haya asignado una cuenta (usuario de windows y contraseña) a la credencial de la cuenta proxy ##xp_cmdshell_proxy_account##.
Si el usuario asignado a la cuenta proxy es un usuario con pocos derechos y privilegios, que es lo correcto,  puede encontrar el error indicado al ejecutar xp_cmdshell.

Solución al error

El error indica que el usuario no puede iniciar sesión como un trabajo por lotes porque le falta ese derecho.

Abrir la aplicación directiva de seguridad local

Para solucionar esto, debe abrir la configuración de directiva de seguridad local en la máquina donde se ejecuta el servicio del SQL Server

Alternativa 1:
La forma más fácil de abrir la ventana de Directiva de Seguridad Local es mediante la ejecución desde inicio de “secpol.msc” lo que la abre directamente.

Alternativa 2:
Desde el panel de control elegimos “Herramientas administrativas” y luego elegimos “Directiva de Seguridad Local”

Asignar el permiso

Para asignar el permiso a la cuenta que asignó en la credencial de la cuenta proxy ##xp_cmdshell_proxy_account##.

En la ventana de “Directiva de Seguridad Local”:

  1. Expandimos Configuración de seguridad
  2. Expandimos Directivas locales
  3. Elegimos Asignación de derechos de usuario
  4. Buscamos la directiva “Iniciar sesión como un trabajo por lotes” (Log on as a batch job) y agregamos al usuario de la cuenta proxy en este derecho.

 

Directiva de seguridad local para xp_cmdShell

Iniciar sesión como un trabajo por lotes

Luego de asignar este derecho al usuario que se asignó a la cuenta proxy  ##xp_cmdshell_proxy_account##  el xp_cmdshell debería funcionar sin emitir el error para los usuarios no administradores.

Más información (diciembre 2017)

Troubleshooting xp_cmdshell failures
CSS SQL Server Engineers
https://blogs.msdn.microsoft.com/psssql/2008/04/10/troubleshooting-xp_cmdshell-failures/

 


Dejá un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *