INF: Cómo ejecutar un paquete DTS como un trabajo programado

Seleccione idioma Seleccione idioma
Id. de artículo: 269074 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E269074
Expandir todo | Contraer todo

En esta página

Resumen

Un problema con el que se podría encontrar a menudo al tratar con paquetes de Servicios de transformación de datos (DTS) es que los paquetes DTS se ejecutan sin errores desde el Administrador corporativo de SQL Server, pero se produce un error cuando se programan para que se ejecuten como trabajos. Normalmente, esto se debe a una diferencia en el contexto de seguridad cuando se ejecuta el paquete como trabajo frente a la situación en la que se ejecuta de forma interactiva.

En este artículo se explican los problemas de seguridad implicados en la ejecución de paquetes DTS.

Más información

Entre los términos utilizados en este artículo se incluyen:
Contraer esta tablaAmpliar esta tabla
Términos Descripción
DTS Servicios de transformación de datos
Autenticación de SQL Sistema de seguridad basado en inicios de sesión y contraseñas de Microsoft SQL Server.
Seguridad estándar Consulte la autenticación de SQL.
Autenticación de SQL Server Consulte la autenticación de SQL.
Autenticación de Microsoft Windows NT Cuando un usuario se conecta mediante una cuenta de usuario de Microsoft Windows, SQL Server comprueba que se validaron el nombre de cuenta y la contraseña cuando el usuario inició sesión en un equipo que ejecuta Microsoft Windows NT, Microsoft Windows 2000, Microsoft Windows 95 o Microsoft Windows 98.
Seguridad integrada Consulte Autenticación de Microsoft Windows NT.
Autenticación de Windows NT o de Microsoft Windows 2000 Consulte Autenticación de Microsoft Windows NT.
Cuenta o inicio de sesión de Microsoft Windows NT equivalente a inicio de sesión o cuenta de Windows Igual que la cuenta de inicio de sesión de Microsoft Windows NT o la cuenta de inicio de sesión de Microsoft Windows 2000.
Agente SQL Servicio Agente SQL Server
SEM Administrador corporativo de SQL Server

¿Dónde se está ejecutando el paquete DTS?

Un problema del que se informa con frecuencia y que está relacionado con los paquetes DTS es la diferencia de comportamiento que se produce en los paquetes según se ejecuten desde el Administrador corporativo de SQL Server o estén programados como trabajo. Cuando se ejecuta el paquete desde el Diseñador DTS en el Administrador corporativo de SQL (SEM), el paquete se está ejecutando en el equipo donde se encuentra usted. Si está en el servidor, tanto físicamente como mediante software de acceso remoto, el paquete se ejecuta en el servidor. Si está en una estación de trabajo y ha registrado el servidor SQL Server en el Administrador corporativo, el paquete se ejecuta en la estación de trabajo. El contexto de seguridad del paquete es el de la cuenta de Windows NT que utilizó para iniciar sesión en ese equipo. Cuando el paquete se ejecuta como un trabajo programado, siempre se ejecuta en el servidor.

Con frecuencia, un programador crea y prueba el paquete DTS de forma interactiva en su estación de trabajo mediante el Diseñador DTS del Administrador corporativo. Una vez depurado el paquete DTS, se programa como trabajo. Esto cambia la ubicación del paquete desde la estación de trabajo del programador hasta el servidor. Si el paquete estuviera cargando datos de texto en SQL Server, fallaría, a menos que el archivo de texto y la ruta de acceso al archivo existieran en el servidor. Si el paquete se estuviera conectando a otro servidor, fallaría si el contexto de seguridad del trabajo no admitiera la conexión.

¿Quién es el propietario del paquete DTS?

Los paquetes se programan creando un trabajo administrado por el servicio Agente SQL. Este trabajo, como cualquier otro trabajo programado, tiene su propietario. El propietario puede ser tanto un inicio de sesión de SQL Server como una cuenta de Windows NT.

Para determinar el propietario:
  • Haga doble clic en el trabajo en el Administrador corporativo y, a continuación, consulte el cuadro combinado desplegable Propietario.

    O bien

  • Ejecute el procedimiento almacenado del sistema msdb.dbo.sp_help_job.
SQL Server 7.0

El contexto de seguridad en que se ejecuta el trabajo viene determinado por el propietario del trabajo. Si el trabajo es propiedad de un inicio de sesión que no es miembro de la función de servidor Sysadmin, el paquete se ejecuta en el contexto de la cuenta SQLAgentCmdExec y tiene los derechos y permisos de dicha cuenta.

Para que SQLAgentCmdExec pueda ejecutar trabajos que se conecten a SQL Server, la cuenta SQLAgentCmdExec debe tener los permisos de Windows/NT apropiados y debe tener acceso de inicio de sesión a SQL Server con los permisos de base de datos adecuados. Normalmente la cuenta SQLAgentCmdExec no tiene ningún derecho fuera del equipo de SQL Server local. Por consiguiente, cualquier paquete que requiera una conexión a otro equipo fallará si se programa como trabajo que es propiedad de un inicio de sesión que no es miembro de la función Sysadmin. SQL Server 2000

El contexto de seguridad en que se ejecuta el trabajo viene determinado por el propietario del trabajo. Si el trabajo es propiedad de un inicio de sesión que no es miembro de la función de servidor Sysadmin, el paquete se ejecuta en el contexto de la configuración de la cuenta como la cuenta de proxy Agente SQL y tiene los derechos y permisos de dicha cuenta.

Para que la cuenta proxy del Agente SQL pueda ejecutar trabajos que se conecten a SQL Server, ésta debe tener los permisos de Windows/NT apropiados y debe tener acceso de inicio de sesión a SQL Server con los permisos de base de datos adecuados. Para los trabajos que ejecutan un paquete DTS, la cuenta de proxy del Agente SQL debe de tener permisos de lectura y escritura en el directorio temporal de la cuenta bajo la que se ejecuta el Agente SQL Server. Por ejemplo,
c:\Documentos y configuraciones\<Cuenta>\Configuración local\Temp
Si el trabajo es propiedad de una cuenta (un inicio de sesión de SQL Server o un inicio de sesión autenticado de Windows NT) que es miembro de la función Sysadmin, el trabajo del Agente SQL se ejecuta en el contexto de la cuenta utilizada para iniciar el servicio del Agente SQL.

Además, si el trabajo es propiedad de una cuenta de dominio de Windows NT y si el paquete está almacenado en SQL Server o en el repositorio de SQL Server (no como archivo), debe iniciar el servicio SQL Server utilizando una cuenta del mismo dominio o una cuenta de un dominio de confianza. Por ejemplo, si el trabajo del Agente SQL es propiedad de una cuenta del dominio de EE.UU., entonces la cuenta utilizada para iniciar el servicio SQL Server debe ser del dominio de EE.UU. o de un dominio en el que confía el dominio de EE.UU. Si se ha iniciado SQL Server utilizando una cuenta local, el paquete no se ejecuta.

¿Qué determina el propietario?

Pregunta: Cuando se hace clic con el botón secundario del mouse (ratón) en el paquete DTS y se elige programar el paquete, ¿cómo se asigna el propietario? Respuesta: El propietario del trabajo del Agente SQL depende de cómo esté registrado SQL Server en el Administrador corporativo. Si SQL Server está registrado utilizando una autenticación de Windows NT, el propietario del trabajo programado es la cuenta utilizada para iniciar el servicio Agente SQL. Si SQL Server está registrado en SEM con la autenticación de SQL Server (por ejemplo, el inicio de sesión SA), el propietario del trabajo es ese mismo inicio de sesión de SQL Server.

Para cambiar la propiedad del paquete:
  1. Haga doble clic en el trabajo en Administrador corporativo.
  2. Haga clic en la ficha General y, a continuación, haga clic en el cuadro combinado desplegable Propietario.
También puede utilizar el procedimiento almacenado del sistema msdb.dbo.sp_update_job para cambiar la propiedad del paquete.

¿Cómo se inicia el paquete DTS?

Si ejecuta un paquete de forma manual utilizando la utilidad de línea de comandos DTSRun.exe, el contexto de seguridad es el de la cuenta de Windows que utilizó para registrarse en el equipo. Si se ejecuta el paquete utilizando DTSRun.exe mediante el procedimiento almacenado extendido xp_cmdshell, el paquete se ejecuta en el contexto de la cuenta utilizada para iniciar el servicio SQL Server, siempre que el usuario que ejecutó xp_cmdshell sea miembro de la función Sysadmin. Si el usuario que ejecutó xp_cmdshell no es una cuenta de la función Sysadmin, entonces DTSRun.exe se ejecuta en el contexto de la cuenta SQLAgentCmdExec.

Si SQL Server se inició utilizando la cuenta Sistema local, el paquete DTS no tiene ningún permiso fuera del equipo que está ejecutando SQL Server.

Si el servicio SQL Server se inicia bajo una cuenta de Windows NT, el paquete tiene los mismos derechos y permisos que esa cuenta de Windows NT. Si esa cuenta de Windows NT es una cuenta de equipo local (en oposición a una cuenta de dominio), el paquete no tiene ningún derecho fuera de ese equipo. Si la cuenta de Windows NT es una cuenta de dominio, el paquete puede tener acceso a recursos de muchos equipos diferentes de ese dominio.

¿Cómo se realizan las conexiones autenticadas por Windows NT?

A veces, un paquete DTS contiene un objeto que realiza una conexión a un origen de datos mediante la autenticación de Windows NT. El contexto de seguridad utilizado para esta conexión es el mismo que el del paquete que se está ejecutando. Si el paquete se ejecuta desde el símbolo del sistema con DTSRun.exe, se utilizan las credenciales de la cuenta de Windows NT que ha iniciado sesión actualmente. Si el paquete se ejecuta como un trabajo del Agente SQL Server, entonces la conexión de seguridad integrada se realiza utilizando la cuenta usada para iniciar el Agente SQL (suponiendo que el propietario del paquete sea miembro de la función Sysadmin).

Problemas comunes

He aquí algunos otros problemas comunes con los que se podría encontrar al ejecutar paquetes DTS como trabajos programados en el Agente SQL:

Unidades asignadas

Si el paquete confía en la ubicación física de un archivo designado por una letra de unidad asignada, éste puede fallar al ejecutarse como trabajo programado del Agente SQL, sin importar a quién pertenezca. El Agente SQL es un servicio de Windows NT y los servicios de Windows NT no pueden ver letras de unidad asignadas. La asignación es parte del perfil del usuario que se carga cuando un usuario inicia sesión en Windows NT. Los servicios no funcionan con perfiles de usuario. Utilice una ruta de acceso UNC en lugar de una letra de unidad asignada.

Ruta de acceso relativa

Una ruta de acceso relativa (o letra de unidad) es específica de la ubicación actual del paquete (como C :\). Si se diseña un paquete en una estación de trabajo y luego se programa, la ubicación desde la que se ejecuta el paquete cambia. Las rutas de letra de unidad hacen referencia ahora a una ubicación física, la del servidor. A menos que los archivos a los que se hace referencia se muevan también al servidor, la ejecución del paquete falla.

Componentes COM en secuencias de comandos ActiveX

Si se llama a los componentes COM (por ejemplo, llamadas a objetos de Microsoft ActiveX Data Objects, ADO, de Remote Data Objects, RDO, o de Objetos de ayuda para la toma de decisiones, DSO) en una secuencia de comandos ActiveX, los componentes a los que se llama deben existir en el equipo desde el que se ejecuta el paquete DTS. Si ejecuta el paquete desde el Diseñador DTS en SEM o DTSRun.exe, los componentes deben existir en el equipo en el que usted se encuentra. Si el paquete está programado para que lo ejecute el Agente SQL, los componentes a los que se llama deben estar cargados en el equipo en que se aloja SQL Server.

Seguridad de los paquetes

Los paquetes DTS pueden tener contraseñas de propietario y de usuario. Estas contraseñas determinan quién puede modificar y ejecutar los paquetes. Ninguna de ellas afecta al contexto de seguridad en que se ejecuta el paquete.

Permisos de la cuenta SQLAgentCmdExec

Si el trabajo se ejecuta bajo el contexto de la cuenta SQLAgentCmdExec, y ésta no tiene derechos de inicio de sesión para el servidor de SQL Server, el trabajo puede fallar y dar el mensaje de error siguiente:
DTSRun: Cargando? DTSRun: Ejecutando... DTSRun OnStart: DTSStep_DTSExecuteSQLTask_1 DTSRun OnError: DTSStep_DTSExecuteSQLTask_1, Error = -2147217843 (80040E4D) Cadena de error: Error de inicio de sesión del usuario 'Nombre_NT\SQLAgentCmdExec'. Origen del error: Archivo de ayuda del Proveedor Microsoft OLE DB para SQL Server: Contexto de la ayuda: 0 Registros de detalles de error: Error: -2147217843 (80040E4D); Error de proveedor: 18456 (4818) Cadena de error: Error de inicio de sesión del usuario 'Nombre_NT\SQLAgentCmdExec'. Origen del error: Archivo de ayuda del Proveedor Microsoft OLE DB para SQL Server: Contexto de la ayuda: 0 DTSRun OnFinish: DTSStep_DTSExecuteSQLTask_1 DTSRun: ejecución del paquete completa. Procesar el código de salida 1. Error en el paso.
Debe conceder a la cuenta SQLAgentCmdExec el inicio de sesión y los permisos de base de datos adecuados para SQL Server.

Propiedades

Id. de artículo: 269074 - Última revisión: viernes, 26 de octubre de 2007 - Versión: 3.2
La información de este artículo se refiere a:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
Palabras clave: 
kbproductlink kbinfo KB269074

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com