Cuentas proxy para SQL Agent

Normalmente cuando realizamos una tarea por medio del SQL Server agent esta se ejecuta en el contexto de la cuenta de servicio del SQL Agent, excepto aquellos que son ejecuciones de código T-SQL.

La cuenta de servicio de SQL Server por recomendaciones y mejores prácticas deberían de ser cuentas de dominio (sin necesidad de ser domain admin) para poder tener acceso a repositorios remotos como FileShares, en ocasiones por cuestiones de políticas internas, seguridad, hardening o simplemente por falta de una ventana de mantenimiento no se cuenta con la facultad de cambiar las cuentas de servicio y tenemos cuentas locales, pero estas cuentas no tienen acceso al contexto de dominio y como ultima acciones también tenemos que en ocasiones la cuenta que tenemos son cuentas de SQL Server y no de Windows.

Una opción que he visto implementada es poner las credenciales en la cadena de acceso que llama a la línea de comandos, esto no es recomendado pues estamos exponiendo las credenciales a cualquiera que pueda ver el job.

Lo que podemos hacer para poder mitigar este evento es crear un proxy para el agente, el cual se basa en una credencial, esta nos proporcionará como su nombre lo indica las credenciales de Windows y o Directorio Activa con la cual realizar acciones fuera de Windows local con esto podemos tener acceso al uso de diferentes cuentas para poder realizar este tipo de acciones que impersonan la cuenta de servicio de SQL Server Agent con credenciales de dominio o con privilegios más altos.

Las credenciales son siempre credenciales de Windows y son para un uso fuera de SQL Server.

Para poder realizarla hacemos lo siguiente:

En el contexto de security damos clic derecho sobre "Security" o sobre "Credentials".


Introducimos la identidad de Windows que queremos usar e ingresemos la contraseña y completamos los datos. Recuerden que si usaran esto para backups es necesario que la cuenta de backup tenga normalmente sysadmin y que debe de ser una cuenta de dominio.


Una vez realizados estos pasos nos dirigimos al SQL Agent y lo expandimos. Veremos la carpeta de Proxies, aquí podemos asignar la proxy a solo un tipo de trabajos o a varios.


De la misma manera daremos clic derecho y elegiremos nueva cuenta proxy. Aquí en credential name elegiremos la credencial que queremos que use el proxy. 



Luego en que tipo de trabajo estará disponible, en mi caso elegiré los trabajos de tipo línea de comando. Una vez hayamos elegido esto podemos seleccionar principales, en este caso sysadmin para que la proxy trabaje como sysadmin, ya habiendo seleccionado estas opciones aceptaremos y veamos como se aplica en un trabajo.




Ya una vez hecho esto y que tengamos un trabajo del tipo de nuestra elección que sea candidato a usar una cuenta proxy, en los steps podemos elegir si el paso se ejecutará con la cuenta de servicio del SQL Agent o con la cuenta de Proxy que hemos creado, con esto el programa se ejecutará en este contexto. 


Notas:

Lamentablemente he visto que aun con esta situación en SQL Server 2005, 2008 y Windows 2003 y 2008 R2 aun con esto el Job fallará, esto es porque el contexto de la cuenta se ejecuta realmente por SQL Server no por el Agente y si tienes este fallo tendrás que cambiar las cuentas de servicio a la misma tanto en el aAent como en el SQL Server mismo. Si alguien a tenido un problema que no funcione por favor decirme que versión de Windows y SQL están usando para poder verificar si existe algún otro método.

Comentarios