Paquete SSIS no se ejecuta cuando se llama desde un paso de trabajo del agente de SQL Server

Síntomas

Cuando se llama a un paquete de Microsoft SQL Server 2005 Integration Services (SSIS) desde un paso de trabajo del agente de SQL Server, no se ejecuta el paquete SSIS. Sin embargo, si no modifica el paquete SSIS, éste se ejecutará correctamente fuera de SQL Server Agent.

Solución

Para resolver este problema, utilice uno de los métodos siguientes. El método más adecuado depende del entorno y la razón por la que el paquete falló. Motivos por los que ha fallado el paquete son los siguientes:
  • La cuenta de usuario que se utiliza para ejecutar el paquete de agente de SQL Server difiere del autor del paquete original.
  • La cuenta de usuario no tiene los permisos necesarios para realizar conexiones o tener acceso a recursos fuera del paquete SSIS.
El paquete no se puede ejecutar en los siguientes escenarios:
  • El usuario actual no puede descifrar los secretos del paquete. Esta situación puede producirse si la cuenta actual o la cuenta de ejecución difiere del autor del paquete original, y el valor de la propiedad del paquete ProtectionLevel permite descifrar los secretos en el paquete al usuario actual.
  • Una conexión de SQL Server que utiliza seguridad integrada falla porque el usuario actual no tiene los permisos necesarios.
  • Se produce un error de acceso al archivo porque el usuario actual no tiene los permisos necesarios para escribir en el recurso compartido de archivos que tiene acceso el Administrador de conexión. Por ejemplo, esta situación puede ocurrir con los proveedores de registro de texto que no utilizan un inicio de sesión y una contraseña. Esta situación también puede producirse con cualquier tarea que depende el Administrador de conexión de archivo, como una tarea sistema de archivos SSIS.
  • Configuración de paquetes basada en registro SSIS utiliza las claves del registro HKEY_CURRENT_USER. Las claves del registro HKEY_CURRENT_USER son específicos del usuario.
  • Una tarea o un administrador de conexión requiere que la cuenta de usuario actual tiene los permisos correctos.
Método 1: Usar una cuenta de proxy agente de SQL Server
Crear una cuenta de proxy agente de SQL Server. Esta cuenta de proxy debe utilizar una credencial que permite SQL Server Agent ejecutar el trabajo como la cuenta que creó el paquete o una cuenta que tenga los permisos necesarios.

Este método funciona para descifrar los secretos y satisface los requisitos clave de usuario. Sin embargo, este método puede haber limitado éxito porque las claves de usuario del paquete SSIS implican el usuario actual y el equipo actual. Por lo tanto, si mueve el paquete a otro equipo, este método puede todavía fallar, incluso si el paso de trabajo utiliza la cuenta de proxy correcta.


Método 2: Establecer la propiedad ProtectionLevel de paquete de SSIS para ServerStorage
Cambie la propiedad de paquete SSIS ProtectionLevel a ServerStorage. Esta configuración almacena el paquete en una base de datos de SQL Server y permite el control de acceso mediante funciones de base de datos de SQL Server.

Método 3: Establecer la propiedad ProtectionLevel de paquete de SSIS para EncryptSensitiveWithPassword
Cambie la propiedad de paquete SSIS ProtectionLevel a EncryptSensitiveWithPassword. Esta configuración utiliza una contraseña para el cifrado. Puede modificar la línea de tarea de comandos del Agente de SQL Server para incluir esta contraseña.


Método 4: Usar archivos de configuración del paquete de SSIS
Utilizar archivos de configuración de paquete SSIS para almacenar información confidencial y, a continuación, almacenar estos archivos de configuración en una carpeta segura. A continuación, puede cambiar la propiedad ProtectionLevel a DontSaveSensitive para que el paquete no está cifrado y no intenta guardar secretos en el paquete. Cuando se ejecuta el paquete SSIS, la información requerida se carga desde el archivo de configuración. Asegúrese de que los archivos de configuración están protegidos adecuadamente si contienen información confidencial.


Método 5: Crear una plantilla de paquete
Para una resolución a largo plazo, cree una plantilla de paquete que utiliza un nivel de protección que difiera de la configuración predeterminada. Este problema no ocurrirá en un futuro los paquetes.

Estado

Este comportamiento es por diseño.

Información avanzada

Pasos para reproducir el problema

  1. Inicie sesión como un usuario que no sea parte del grupo SQLServer2005SQLAgentUser. Por ejemplo, puede crear un usuario local.
  2. Crear un paquete SSIS y, a continuación, agregue una tarea de ExecuteSQL. Utilice un administrador de conexión OLE DB en el archivo de msdb local utilizando la siguiente cadena: 'Autenticación de Windows' - SQLSourceType: "Entrada directa" - SQLStatement: "sp_who"
  3. Ejecute el paquete para asegurarse de que funciona correctamente.
  4. Observe que se establece la propiedad ProtectionLevel a EncryptSensitiveWithPassword.
  5. Crear un trabajo del agente de SQL Server y un paso de trabajo. En la lista Ejecutar como , haga clic en el Servicio del Agente SQL Server para ejecutar el paso del trabajo.
El texto en el historial de trabajos del Agente SQL Server muestra información similar al siguiente:

Descifrar los secretos de paquete

El valor predeterminado de la propiedad ProtectionLevel de paquete SSIS es EncryptSensitiveWithUserKey. Cuando se guarda el paquete, SSIS cifra sólo las partes del paquete que contienen las propiedades que están marcadas "confidenciales," como contraseñas, nombres de usuario y las cadenas de conexión. Por lo tanto, cuando se vuelve a cargar el paquete, el usuario actual debe satisfacer los requisitos de cifrado de las propiedades confidenciales para descifrarse. Sin embargo, el usuario actual no tiene que satisfacer los requisitos de cifrado para cargar el paquete. Cuando se ejecuta el paquete a través de un paso de trabajo del agente de SQL Server, la cuenta predeterminada es la cuenta de servicio del Agente SQL Server. Esta cuenta predeterminada probablemente es un usuario distinto del autor del paquete. Por lo tanto, el paso de trabajo del agente de SQL Server puede cargar y empezar a ejecutar el paso del trabajo, pero se produce un error en el paquete porque no puede completar una conexión. Por ejemplo, el paquete no puede completar una conexión OLE DB o una conexión FTP. Se produce un error en el paquete porque no puede descifrar las credenciales que debe tener para conectarse.


Importante: Tenga en cuenta el proceso de desarrollo y el medio ambiente para determinar las cuentas que se necesitan y se utilizan en cada equipo. La configuración de EncryptSensitiveWithUserKey de la propiedad ProtectionLevel es un potente. Esta configuración no debe ser descontada porque hace que las complicaciones de la implementación al principio. Puede cifrar los paquetes al iniciar la sesión en la cuenta correspondiente. También puede utilizar la utilidad de línea de comandos SSIS Dtutil.exe para cambiar los niveles de protección mediante un archivo .cmd y el subsistema de comandos del agente de SQL Server. Por ejemplo, siga estos pasos. Ya puede utilizar la utilidad Dtutil.exe en archivos por lotes y bucles, puede seguir estos pasos para varios paquetes al mismo tiempo.
  1. Modificar el paquete que desea cifrar mediante una contraseña.
  2. Utilice la utilidad Dtutil.exe a través de un paso de trabajo del agente de SQL Server de sistema operativo (cmd Exec) para cambiar la propiedad ProtectionLevel a EncryptSensitiveWithUserKey. Este proceso implica descifrar el paquete utilizando la contraseña y, a continuación, volver a cifrar el paquete. La clave de usuario que se utiliza para cifrar el paquete es el paso de trabajo de agente de SQL Server en la lista Ejecutar como .

    Nota: Porque la clave incluye el nombre de usuario y el nombre del equipo, puede limitarse el efecto de mover los paquetes a otro equipo.

Asegúrese de que se dispone de información detallada del error acerca del error de paquete SSIS

En lugar de confiar en los detalles limitados en el historial de trabajos del Agente SQL Server, puede utilizar SSIS registro para asegurarse de que tiene información de error acerca del error de paquete SSIS. También puede ejecutar el paquete mediante el comando de subsistema de exec en lugar del comando de subsistema SSIS.

Acerca del registro de SSIS

Proveedores de registro y registro SSIS le permiten capturar detalles sobre la ejecución del paquete y los errores. De forma predeterminada, el paquete no registra información. Debe configurar el paquete para registrar información. Cuando se configura el paquete para registrar la información, se mostrará información detallada que se parece al siguiente. En este caso, sabrá que es un problema de permisos:

Acerca del comando de subsistema de exec e información de resultados

Usando el enfoque de comando de subsistema de exec, agregar registro modificadores a la línea de comandos SSIS para llamar al archivo ejecutable de línea de comandos de Dtexec.exe SSIS de consola detallado. Además, utilizar la característica avanzada de trabajo del archivo de salida. También puede utilizar la opción de Incluir salida de paso en el historial para redirigir la información de registro en un archivo o en el historial de trabajos del Agente SQL Server.

El siguiente es un ejemplo de una línea de comandos:

dtexec.exe /FILE "C:\_work\SSISPackages\ProtectionLevelTest\ProtectionLevelTest\AgentTesting.dtsx" /MAXCONCURRENT " -1 
" /CHECKPOINTING OFF /REPORTING V /CONSOLELOG NCOSGXMT



El registro /console devuelve detalles similares a los siguientes:

Error: 2006-04-27 18:13:34.76   Code: 0xC0202009
Source: AgentTesting Connection manager "(local).msdb"
Description: An OLE DB error has occurred. Error code: 0x80040E4D.
An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E4D Description: "Login failed for user 'DOMAINNAME\username'.".
End Error



Error: 2006-04-28 13:51:59.19   Code: 0xC0016016
Source:
Description: Failed to decrypt protected XML node "DTS:Property" with error 0x80070002 "The system cannot find the file specified.". You may not be authorized to access this information. This error occurs when there is a cryptographic error. Verify that the correct key is available.
End Error



Log:     Name: OnError
Computer: COMPUTERNAME
Operator: DOMAINNAME\username
Source Name: Execute SQL Task
Source GUID: {C6C7286D-57D4-4490-B12D-AC9867AE5762}
Execution GUID: {7AFE3D9E-5F73-42F0-86FE-5EFE264119C8}
Message: Failed to acquire connection "(local).msdb". Connection may not be configured correctly or you may not have the right permissions on this connection.
Start Time: 2006-04-27 18:13:34
End Time: 2006-04-27 18:13:34
End Log

Referencias

Para obtener más información acerca de un problema similar, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

904800 recibe un mensaje de error "Error al cargar" cuando intenta ejecutar un paquete de SQL Server 2005 Integration Services en SQL Server 2005

Para obtener más información acerca de cómo utilizar la utilidad Dtutil.exe en operaciones por lotes, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

906562 cómo utilizar la utilidad dtutil (Dtutil.exe) para establecer el nivel de protección de un lote de paquetes de SQL Server Integration Services (SSIS) en SQL Server 2005

Para obtener más información sobre cómo crear plantillas de paquetes, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

908018 cómo crear una plantilla de paquete en SQL Server Business Intelligence Development Studio



Para obtener más información acerca de la seguridad de los paquetes SSIS y la propiedad ProtectionLevel , vea el tema "Consideraciones de seguridad para Integration Services" en libros en pantalla de SQL Server 2005.

Desafortunadamente, los usuarios no son conscientes de que configuración de paso del trabajo predeterminado agente ponerlos en este estado. Para obtener más información acerca de proxy agente de SQL Server y SSIS, vea los siguientes temas en libros en pantalla de SQL Server 2005:
  • Programación de la ejecución del paquete en SQL Server Agent
  • Creación de proxy agente de SQL Server
Propiedades

Id. de artículo: 918760 - Última revisión: 14 ene. 2017 - Revisión: 1

Microsoft SQL Server 2008 Service Pack 1, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2005 Service Pack 3, Microsoft SQL Server 2005 Service Pack 2, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems, Microsoft SQL Server 2005 Enterprise X64 Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Standard X64 Edition, Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems

Comentarios