Solución:
Para los usuarios que no son miembros de la función sysadmin en la instancia de SQL Server, deben realizar las siguientes acciones para otorgar acceso al procedimiento almacenado extendido xp_cmdshell. Además, si olvidó uno de los pasos, he enumerado el error que se lanzará.
-
Habilite el procedimiento xp_cmdshell
Msg 15281, nivel 16, estado 1, procedimiento xp_cmdshell, línea 1 SQL Server bloqueó el acceso al procedimiento ‘sys.xp_cmdshell’ del componente ‘xp_cmdshell’ porque este componente está desactivado como parte de la configuración de seguridad de este servidor. Un administrador del sistema puede habilitar el uso de ‘xp_cmdshell’ usando sp_configure. Para obtener más información sobre cómo habilitar ‘xp_cmdshell’, consulte “Configuración del área de superficie” en los Libros en pantalla de SQL Server. *
-
Cree un inicio de sesión para el usuario que no es administrador de sistemas que tiene acceso público a la base de datos maestra
Msg 229, nivel 14, estado 5, procedimiento xp_cmdshell, línea 1 Se denegó el permiso EJECUTAR en el objeto ‘xp_cmdshell’, base de datos ‘mssqlsystemresource’, esquema ‘sys’. *
-
Otorgue permiso EXEC en el procedimiento almacenado xp_cmdshell
Msg 229, nivel 14, estado 5, procedimiento xp_cmdshell, línea 1 Se denegó el permiso EJECUTAR en el objeto ‘xp_cmdshell’, base de datos ‘mssqlsystemresource’, esquema ‘sys’. *
-
Cree una cuenta de proxy con la que se ejecutará xp_cmdshell utilizando sp_xp_cmdshell_proxy_account
Msg 15153, nivel 16, estado 1, procedimiento xp_cmdshell, línea 1 La información de la cuenta del proxy xp_cmdshell no se puede recuperar o no es válida. Verifique que la credencial ‘## xp_cmdshell_proxy_account ##’ exista y contenga información válida. *
Por su error, parecería que se omitió el paso 2 o 3. No estoy familiarizado con los clústeres para saber si hay algo particular en esa configuración.
Quiero completar la respuesta de tchester.
(1) Habilite el procedimiento xp_cmdshell:
-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
-- Enable the xp_cmdshell procedure
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO
(2) Cree un ‘Domain TestUser’ de inicio de sesión (usuario de Windows) para el usuario que no es administrador de sistemas que tiene acceso público a la base de datos maestra
(3) Otorgue permiso EXEC en el procedimiento almacenado xp_cmdshell:
GRANT EXECUTE ON xp_cmdshell TO [DomainTestUser]
(4) Cree una cuenta de proxy con la que se ejecutará xp_cmdshell utilizando sp_xp_cmdshell_proxy_account
EXEC sp_xp_cmdshell_proxy_account 'DomainTestUser', 'pwd'
-- Note: pwd means windows password for [DomainTestUser] account id on the box.
-- Don't include square brackets around DomainTestUser.
(5) Otorgar permiso del servidor de control al usuario
USE master;
GRANT CONTROL SERVER TO [DomainTestUser]
GO