Proteger paquetes DTS almacenados en SQL Server

Hay un posible riesgo de seguridad en los paquetes que se crearon en los Servicios de transformación de datos (DTS) de Microsoft SQL Server 2000 y que están almacenados en la base de datos msdb. Este problema se centra en los procedimientos almacenados del sistema que llevan a cabo las tareas más comunes para estos paquetes DTS. Un ejemplo de un procedimiento almacenado del sistema que realiza una tarea común es el procedimiento almacenado sp_enum_dtspackages, que muestra los paquetes DTS almacenados en la base de datos msdb. Otro ejemplo es el procedimiento almacenado del sistema sp_get_dtspackage que carga un paquete DTS en una aplicación cliente. El Administrador corporativo de SQL Server 2000, SQL Server Management Studio y la API DTS usan estos procedimientos almacenados para realizar tareas comunes.

Tan pronto como comprenda el posible riesgo de seguridad asociado a los procedimientos almacenados del sistema de DTS, podrá tomar las medidas adecuadas para reducir dicho riesgo.

Nota importanteImportante

Los Servicios de transformación de datos (DTS) han quedado obsoletos. Para obtener más información, vea Servicios de transformación de datos (DTS).

Descripción del posible riesgo de seguridad

En versiones de SQL Server anteriores a SQL Server 2008, el permiso de ejecución en algunos de los procedimientos almacenados del sistema de DTS se concede a PUBLIC. Esta configuración permite que cualquiera que pueda iniciar sesión en la base de datos msdb realice las tareas siguientes:

  • Obtener una lista de paquetes DTS.

  • Recuperar los propios paquetes.

  • Guardar paquetes nuevos.

Sin embargo, solo el propietario de un paquete puede modificar un paquete existente, guardando una nueva versión de éste, o eliminar un paquete. DTS modifica un paquete guardando una nueva versión de éste. No sobrescribe la versión actual del paquete.

El posible riesgo de seguridad se produce si una aplicación se conecta con SQL Server usando un inicio de sesión que posee paquetes DTS. En este escenario, existe el riesgo de que un ataque por inyección de código SQL modifique o elimine los paquetes existentes.

Procedimientos almacenados del sistema de DTS afectados

La lista siguiente identifica los procedimientos almacenados del sistema de DTS cuyo permiso de ejecución se concede a PUBLIC y que pueden producir un posible riesgo de seguridad:

  • sp_add_dtspackage

  • sp_drop_dtspackage

  • sp_dump_dtslog_all

  • sp_dump_dtspackagelog

  • sp_dump_dtssteplog

  • sp_dump_dtstasklog

  • sp_enum_dtspackagelog

  • sp_enum_dtspackages

  • sp_enum_dtssteplog

  • sp_enum_dtstasklog

  • sp_get_dtspackage

  • sp_get_dtsversion

  • sp_log_dtspackage_begin

  • sp_log_dtspackage_end

  • sp_log_dtsstep_begin

  • sp_log_dtsstep_end

  • sp_log_dtstask

  • sp_make_dtspackagename

  • sp_reassign_dtspackageowner

Procedimientos almacenados del sistema de DTS que no están afectados

La lista siguiente identifica los procedimientos almacenados del sistema de DTS cuyo permiso de ejecución no se concede a PUBLIC:

  • sp_add_dtscategory

  • sp_drop_dtscategory

  • sp_enum_dtscategories

  • sp_modify_dtscategory

  • sp_reassign_dtspackagecategory

Aunque estos procedimientos almacenados del sistema contienen las letras "dts" en el nombre, no representan el posible riesgo de seguridad descrito en este tema.

Reducir el posible riesgo de seguridad

Para aumentar la seguridad de los paquetes DTS, SQL Server 2008 ha cambiado la configuración predeterminada en las circunstancias siguientes:

  • Nueva instalación. Al realizar una nueva instalación de SQL Server 2008, el permiso de ejecución en los procedimientos almacenados del sistema de DTS se revoca para PUBLIC. Los permisos para administrar y ejecutar los paquetes DTS solo se conceden a las funciones de nivel de base de datos de Integration Services siguientes, y únicamente se pueden otorgar mediante estos roles:

    • db_ssisadmin

    • db_ssisltduser

    • db_ssisoperator

    Si posteriormente importa paquetes DTS en la base de datos msdb en esta instancia de SQL Server 2008, solo las cuentas que pertenezcan a estos roles de Integration Services podrán administrar y ejecutar los paquetes DTS correctamente.

  • Actualización. Al actualizar una versión anterior de SQL Server a SQL Server 2008, el permiso de ejecución en los procedimientos almacenados del sistema de DTS no se revoca para PUBLIC. Esto mantiene la compatibilidad con las aplicaciones existentes. La actualización también concede permisos de ejecución a los tres roles de nivel de base de datos de Integration Services mencionados anteriormente en este tema. Tan pronto como sea posible, un administrador del sistema debería ejecutar el procedimiento almacenado descrito en la sección siguiente para revocar el permiso de ejecución de PUBLIC.

Para obtener información acerca de los roles de Integration Services, vea Usar roles de Integration Services.

Usar el nuevo procedimiento almacenado sp_dts_secure

SQL Server 2008 incluye un nuevo procedimiento almacenado del sistema, sp_dts_secure, para administrar la seguridad de los paquetes DTS. Este procedimiento tiene un parámetro de entrada necesario. Este parámetro revoca o concede los permisos de ejecución públicos en los procedimientos almacenados del sistema de DTS:

  • Para revocar los permisos de ejecución públicos y conceder acceso únicamente a través de los roles de nivel de base de datos de Integration Services, ejecute el procedimiento sp_dts_secure con el parámetro establecido en 1:

    sp_dts_secure 1

    Para restringir el acceso a los procedimientos almacenados de DTS a los usuarios autorizados, ejecute este procedimiento poco después de actualizar y aplicar los roles de nivel de base de datos de Integration Services.

    Nota

    Al realizar una nueva instalación de SQL Server 2008, el programa de instalación realiza dos acciones en los procedimientos almacenados del sistema de DTS. En primer lugar, revoca el permiso de ejecución para PUBLIC. A continuación, concede permisos de ejecución a los roles de nivel de base de datos de Integration Services mencionados anteriormente en este tema. Sin embargo, al ejecutar manualmente sp_dts_secure 1, este procedimiento almacenado únicamente revoca el permiso de ejecución en los procedimientos almacenados del sistema de DTS para PUBLIC. Debe aplicar los roles de nivel de base de datos de Integration Services por separado.

  • Para conceder permisos de ejecución públicos en el procedimiento almacenado de DTS, ejecute el procedimiento sp_dts_secure con el parámetro establecido en 0:

    sp_dts_secure 0

    Puede usar este procedimiento en un nuevo escenario de instalación si tiene que conservar la compatibilidad con aplicaciones existentes mientras se prepara para volver a habilitar las restricciones de seguridad.

Icono de Integration Services (pequeño) Manténgase al día con Integration Services

Para obtener las más recientes descargas, artículos, ejemplos y vídeos de Microsoft, así como soluciones seleccionadas de la comunidad, visite la página de Integration Services en MSDN o TechNet:

Para recibir notificaciones automáticas de estas actualizaciones, suscríbase a las fuentes RSS disponibles en la página.