xp_cmdshell sirve que permiso para enable ejecutar activate sql-server database xp-cmdshell

sql server - sirve - Obteniendo permiso de ejecución para xp_cmdshell



xp_cmdshell sql server 2012 (4)

Para ampliar lo que se ha proporcionado para exportar automáticamente datos como CSV a un recurso compartido de red a través del Agente SQL Server.

(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 inicio de sesión ''Domain / TestUser'' (usuario de Windows) para el usuario que no es sysadmin y que tenga acceso público a la base de datos maestra. Hecho a través de mapeo de usuario

(3) Iniciar sesión como trabajo por lotes: vaya a Política de seguridad local -> Políticas locales -> Asignación de derechos de usuario. Agregar usuario a "Iniciar sesión como un trabajo por lotes"

(4) Dar permisos de lectura / escritura a la carpeta de red para dominio / usuario

(5) Conceda el permiso EXEC en el procedimiento almacenado xp_cmdshell:

GRANT EXECUTE ON xp_cmdshell TO [Domain/TestUser]

(6) Cree una cuenta de proxy con la que se ejecutará xp_cmdshell usando sp_xp_cmdshell_proxy_account

EXEC sp_xp_cmdshell_proxy_account ''Domain/TestUser'', ''password_for_domain_user''

(7) Si el comando sp_xp_cmdshell_proxy_account no funciona, créelo manualmente

create credential ##xp_cmdshell_proxy_account## with identity = ''Domain/DomainUser'', secret = ''password''

(8) Habilitar el Agente SQL Server. Abra el Administrador de configuración de SQL Server, navegue a los Servicios de SQL Server, habilite el Agente SQL Server.

(9) Crear trabajo automatizado. Abra SSMS, seleccione el Agente SQL Server, luego haga clic con el botón derecho en los trabajos y haga clic en "Nuevo trabajo".

(10) Seleccione "Propietario" como su usuario creado. Seleccione "Pasos", haga "tipo" = T-SQL. Rellene el campo de comando similar a continuación. Establecer delimitador como '',''

EXEC master..xp_cmdshell ''SQLCMD -q "select * from master" -o file.csv -s ","

(11) Rellene los horarios en consecuencia.

Aparece un mensaje de error al intentar ejecutar xp_cmdshell desde un procedimiento almacenado.

xp_cmdshell está habilitado en la instancia. Y el permiso de ejecución fue otorgado a mi usuario, pero todavía estoy viendo la excepción.

El permiso EXECUTE se denegó en el objeto ''xp_cmdshell'', la base de datos ''mssqlsystemresource'', el esquema ''sys''

Parte del problema es que este es un clúster compartido, y tenemos una base de datos única en la instancia, por lo que no tenemos un rango completo de permisos de administrador. Así que no puedo entrar y otorgar permisos, y qué.


Para los usuarios que no son miembros de la función sysadmin en la instancia de SQL Server, debe 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á.

  1. Habilitar 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 línea de SQL Server. *

  2. Cree un inicio de sesión para el usuario no-sysadmin que tiene acceso público a la base de datos maestra

    Msg 229, Nivel 14, Estado 5, Procedimiento xp_cmdshell, Línea 1 El permiso EJECUTAR fue denegado en el objeto ''xp_cmdshell'', base de datos ''mssqlsystemresource'', esquema ''sys''. *

  3. Otorgue permiso EXEC en el procedimiento almacenado xp_cmdshell

    Msg 229, Nivel 14, Estado 5, Procedimiento xp_cmdshell, Línea 1 El permiso EJECUTAR fue denegado en el objeto ''xp_cmdshell'', base de datos ''mssqlsystemresource'', esquema ''sys''. *

  4. Cree una cuenta de proxy con la que se ejecutará xp_cmdshell usando 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 ##'' existe y contiene información válida. *

Parecería de su error que se saltó el paso 2 o el 3. No estoy familiarizado con los clústeres para saber si hay algo en 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 inicio de sesión ''Domain / TestUser'' (usuario de Windows) para el usuario que no es sysadmin que tiene acceso público a la base de datos maestra

(3) Conceda el permiso EXEC en el procedimiento almacenado xp_cmdshell:

GRANT EXECUTE ON xp_cmdshell TO [Domain/TestUser]

(4) Cree una cuenta de proxy con la que se ejecutará xp_cmdshell usando sp_xp_cmdshell_proxy_account

EXEC sp_xp_cmdshell_proxy_account ''Domain/TestUser'', ''pwd'' -- Note: pwd means windows password for [Domain/TestUser] account id on the box. -- Don''t include square brackets around Domain/TestUser.

(5) Otorgar permiso de servidor de control al usuario

USE master; GRANT CONTROL SERVER TO [Domain/TestUser] GO


Tchester dijo:

(2) Cree un inicio de sesión para el usuario no-sysadmin que tiene acceso público a la base de datos maestra

Fui a la lista de la base de datos de mi usuario (servidor / seguridad / conexiones / mi nombre de usuario / propiedades / asignación de usuarios y quise marcar la casilla de la base de datos maestra. Recibí un mensaje de error que indicaba que el usuario ya existe en la base de datos maestra. a la base de datos maestra, eliminó al usuario, regresó a "mapeo de usuarios" y marcó la casilla de verificación de maestro. Marque la casilla "pública" a continuación.

Después de eso, debe volver a emitir la ejecución de concesión en xp_cmdshell a "mi nombre de usuario"

Yves