Cómo habilitar cuentas que no son sysadmin para ejecutar el procedimiento almacenado extendido "xp_cmdshell" en SQL Server 2000


Resumen


En este artículo se describe cómo configurar una cuenta de proxy del Agente SQL Server de nivel de Windows de Microsoft para que la usen los inicios de sesión de SQL que no son miembros de la función fija de servidor sysadmin . Además, el artículo contiene referencias a más información para ayudarle a solucionar problemas que pueden surgir al intentar configurar una cuenta de proxy.

INTRODUCCIÓN


El xp_cmdshell procedimiento almacenado extendido invoca un shell de comandos de Windows desde Microsoft SQL Server 2000. Cuando un miembro del rol fijo de servidor sysadmin ejecuta el xp_cmdshell procedimiento almacenado extendido, el proceso de Windows del shell de comandos se ejecuta con el contexto de seguridad de la cuenta de servicio de Windows de SQL Server. Por ejemplo, si SQL Server se ejecuta en un inicio de sesión de Windows que tiene derechos administrativos en el equipo, el usuario que abre un símbolo del sistema con el xp_cmdshell procedimiento almacenado extendido recibirá el acceso a Windows como administrador local. De forma predeterminada, el permiso para ejecutar el xp_cmdshell procedimiento almacenado extendido solo se concede a los miembros del rol fijo de servidor sysadmin . Este permiso ayuda a disuadir el aumento de derechos. Cuando desee iniciar nuevos procesos de Windows con un nivel de derechos reducido, puede usar la cuenta de proxy del Agente SQL Server para configurar una cuenta de Windows con el nivel adecuado de derechos.

Más información


Cuando intenta ejecutar el xp_cmdshell procedimiento almacenado extendido desde un inicio de sesión de SQL Server que no es miembro del rol de servidor sysadmin y la cuenta de proxy del Agente SQL Server no se ha configurado correctamente, es posible que reciba mensajes de error similares a los siguientes:
MSG 50001, nivel 1, estado 50001 xpsql. cpp: error 997 de GetProxyAccount en la línea 499
MSG 50001, nivel 1, estado 50001 xpsql. cpp: error 317 de GetProxyAccount en la línea 499
MSG 50001, nivel 1, estado 50001 xpsql. cpp: error 0 de GetProxyAccount en la línea 499
MSG 50001, nivel 1, estado 50001 xpsql. cpp: error 87 de GetProxyAccount en la línea 499
Si tiene que permitir que los usuarios que no sean administradores ejecuten el procedimiento almacenado extendido xp_cmdshell en SQL Server 2000, debe configurar la cuenta de proxy y la cuenta de inicio de SQL Server para que sean miembros del grupo de administradores local. Cuando SQL Server ejecuta trabajos o comandos para usuarios que no son miembros de la función fija de servidor sysadmin, el Agente SQL Server y el xp_cmdshell procedimiento almacenado extendido usan la cuenta de proxy. Las credenciales de seguridad de Windows para la cuenta de proxy se almacenan en la base de datos de secretos de la autoridad de seguridad local (LSA). Solo los administradores de Windows pueden tener acceso a esta información. Por lo tanto, si la cuenta de inicio de SQL Server no es miembro del grupo de administradores locales, el usuario no puede almacenar ni recuperar las credenciales de seguridad de Windows para iniciar sesión como cuenta de proxy y se produce un error en el procedimiento almacenado extendido xp_cmdshell . Para permitir que los usuarios que no sean administradores ejecuten el xp_cmdshell procedimiento almacenado extendido, la cuenta de inicio de SQL Server debe ser miembro del grupo de administradores local. Para configurar una cuenta de proxy para los inicios de sesión de SQL Server que no son miembros de la función fija de servidor sysadmin , use uno de los métodos siguientes.

Método 1: usar el Administrador corporativo de SQL Server

Configurar la cuenta de Windows

Para configurar la cuenta de Windows para permitir que los usuarios que no sean administradores ejecuten el xp_cmdshell procedimiento almacenado extendido, siga estos pasos:
  1. Inicie el Administrador corporativo de SQL Server.
  2. En el Administrador corporativo de SQL Server, expanda Microsoft SQL Servery, a continuación, expanda grupo de SQL Server.
  3. Expanda la instancia de SQL Server para la que desea configurar la cuenta de proxy.
  4. Expanda Administración, haga clic con el botón secundario en Agente SQL Servery después haga clic en propiedades.
  5. En el cuadro de diálogo propiedades del Agente SQL Server , haga clic en la pestaña sistema de trabajo .
  6. En cuenta de proxy que no es sysadmin, haga clic para desactivar la casilla de verificación solo los usuarios con privilegios de sysadmin pueden ejecutar pasos de trabajo CmdExec y ActiveScripting .
  7. En el cuadro de diálogo cuenta de proxy del Agente SQL Server, escriba el nombre de la cuenta de Windows en el cuadro nombre de usuario.
  8. En el cuadro contraseña , escriba la contraseña de Windows.
  9. En el cuadro dominio , escriba el dominio del que es miembro la cuenta de Windows y, a continuación, haga clic en Aceptar dos veces.

Agregar una cuenta de inicio de sesión de SQL Server

Para agregar una cuenta de inicio de sesión de SQL Server a la que desee conceder permisos para ejecutar el xp_cmdshell procedimiento almacenado extendido, siga estos pasos:
  1. En el administrador de empresa de SQL Server, expandaseguridad.
  2. En el panel inicios de sesión , haga clic con el botón secundario en la cuenta de inicio de sesión de SQL Server a la que desea conceder permisos y, después, haga clic enpropiedades.Nota Si la cuenta aún no se ha agregado, puede crear una cuenta de Windows proxy como cuenta de inicio de sesión.
  3. En el cuadro de diálogo propiedades de inicio de sesión de SQL Server , haga clic en la pestaña acceso a base de datos .
  4. En la lista especificar la base de datos a la que se puede acceder por este inicio de sesión , active la casilla permitir de la base de datos Master y, a continuación, haga clic en Aceptar.
  5. Expanda bases de datos, expandaMastery haga clic en extender procedimientos almacenados.
  6. Busque y haga clic con el botón secundario en elxp_cmdshell procedimiento almacenado extendido y, a continuación, haga clic enpropiedades.
  7. En el cuadro de diálogo propiedades de procedimiento almacenado extendido , haga clic en permisos.
  8. Active la casilla de verificación exec para la cuenta de inicio de sesión de SQL Server a la que desea conceder permisos de ejecución y, a continuación, haga clic en Aceptar dos veces.

Método 2: ejecutar una secuencia de comandos de Transact-SQL

Ejecute el siguiente script de Transact-SQL para habilitar la cuenta de Windows para que ejecute el procedimiento almacenado extendido xp_cmdshell :
-- Set database to master.USE masterGO-- Add a valid Windows account as proxy account.EXECUTE xp_sqlagent_proxy_account N'SET'                        , N'<DomainName>'                        , N'<WindowsAccount>'                        , N'<WindowsPassword>'GO-- Get the proxy account to determine whether it is set up correctly. EXECUTE xp_sqlagent_proxy_account N'GET'GO-- Enable non-system administrators to run the job and to execute xp_cmdshell.EXECUTE msdb..sp_set_sqlagent_properties @sysadmin_only = 0GO
Nota En esta secuencia de comandos, <DomainName> es el dominio del que es miembro la cuenta de Windows. <WindowsAccount> es el nombre de la cuenta de Windows. <WindowsPassword> es la contraseña de la cuenta de Windows. Para agregar la cuenta de inicio de sesión de SQL Server a la que desea conceder permiso para ejecutar el xp_cmdshell procedimiento almacenado extendido, ejecute la siguiente secuencia de comandos TRANSACT-SQL:
USE masterGO-- Grant database access to the SQL Server login account that you want to provide access.EXEC sp_grantdbaccess '<SQLLogin>'GO-- Grant execute permission on xp_cmdshell to the SQL Server login account.GRANT exec ON xp_cmdshell TO <SQLLogin>GO
Nota En este script, <SQLLogin> es el inicio de sesión de SQL Server al que desea conceder permiso para ejecutar el procedimiento almacenado extendido xp_cmdshell .Nota La cuenta de proxy es la cuenta de Windows en cuyo contexto de seguridad se ejecutan los trabajos del Agente SQL Server o los comandos de la línea de comandos. Al configurar la cuenta de Windows para la cuenta de proxy del Agente SQL Server, debe dar al usuario el derecho de usuario "iniciar sesión como proceso por lotes" en el nivel de Windows.

Referencias


Para obtener más información sobre el xp_cmdshell procedimiento almacenado extendido, consulte el tema "referencia de TRANSACT-SQL" en los libros en línea de SQL Server. Para obtener más información sobre la cuenta de proxy del Agente SQL Server, visite los siguientes sitios web de Microsoft Developer Network (MSDN):Para obtener más información sobre cómo establecer los permisos adecuados en la cuenta de proxy, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
283811 Cómo cambiar la cuenta de servicio de SQL Server o del Agente SQL Server sin usar el Administrador corporativo de SQL Server 2000 o el administrador de configuración de SQL Server en SQL Server 2005