Establecer el nivel de protección de los paquetes
Para proteger los datos de un paquete Integration Services, puede establecer un nivel de protección que ayude a proteger los datos confidenciales únicamente o todos los datos del paquete. Asimismo, puede cifrar estos datos con una contraseña o una clave de usuario, o confiar en que la base de datos cifre los datos. Además, el nivel de protección que utiliza para un paquete no es necesariamente estático, sino que cambia a lo largo de su ciclo de vida. A menudo se establece un nivel de protección durante el desarrollo y otro cuando el paquete se implementa.
[!NOTA]
Además de los niveles de protección descritos en este tema, los paquetes guardados en la base de datos msdb también se pueden proteger utilizando las funciones fijas de nivel de base de datos. Integration Services incluye tres funciones fijas de nivel de base de datos para asignar permisos a paquetes: db_ssisadmin, db_ssisltduser y db_ssisoperator. Para obtener más información, vea Usar funciones de Integration Services.
Definir la información confidencial
En un paquete Integration Services, la información siguiente se define como confidencial:
La parte de contraseña de una cadena de conexión. Sin embargo, si elige una opción que cifra todo, la cadena de conexión completa se considerará confidencial.
Los nodos XML generados por la tarea y etiquetados como confidenciales. El etiquetado de los nodos XML está controlado por Integration Services y los usuarios no lo pueden cambiar.
Todas las variables marcadas como confidenciales. El marcado de las variables está controlado por Integration Services.
El que Integration Services considere una propiedad como confidencial dependerá de si el programador del componente de Integration Services, como un administrador de conexiones o una tarea, ha designado la propiedad como tal. Los usuarios no pueden agregar propiedades a la lista de propiedades que se consideran confidenciales, ni pueden quitarlas de la lista.
Usar el cifrado
El cifrado, tal como se utiliza en los niveles de protección de paquetes, se lleva a cabo con la API Microsoft Data Protection (DPAPI), que forma parte de la API de criptografía (CryptoAPI).
Los niveles de protección de paquetes que cifran los paquetes con contraseñas requieren que el usuario también suministre una contraseña. Si cambia el nivel de protección de uno que no utilice contraseñas a otro que sí lo haga, se le pedirá una contraseña.
Además, para los niveles de protección que usan una contraseña, Integration Services utiliza el algoritmo de cifrado Triple DES con una longitud de clave de 192 bits, disponible en la biblioteca de clases de .NET Framework (FCL).
Descripción de los niveles de protección
En la tabla siguiente se describen los niveles de protección que proporciona Integration Services. Los valores entre paréntesis son valores de la enumeración DTSProtectionLevel. Estos valores aparecen en la ventana Propiedades que se utiliza para configurar las propiedades del paquete al trabajar con paquetes en Business Intelligence Development Studio.
Nivel de protección |
Descripción |
---|---|
No guardar la información confidencial (DontSaveSensitive) |
Suprime los valores de las propiedades confidenciales del paquete al guardarlo. Este nivel de protección no cifra, sino que impide que se guarden con el paquete las propiedades marcadas como confidenciales y, en consecuencia, impide que los datos confidenciales estén disponibles para otros usuarios. Si un usuario distinto abre el paquete, aparecerán espacios en blanco en el lugar de la información confidencial y usuario deberá suministrar la información confidencial. Cuando se utiliza con la utilidad dtutil (dtutil.exe), este nivel de protección corresponde al valor 0. |
Cifrar todos los datos con una contraseña (EncryptAllWithPassword) |
Usa una contraseña para cifrar todo el paquete. El paquete se cifra con una contraseña suministrada por el usuario al crear o exportar el paquete. Para abrir el paquete en el Diseñador SSIS o ejecutarlo con la utilidad del símbolo del sistema dtexec, el usuario debe proporcionar la contraseña del paquete. Sin la contraseña, el usuario no tiene acceso al paquete ni lo puede ejecutar. Cuando se utiliza con la utilidad dtutil, este nivel de protección corresponde al valor 3. |
Cifrar todos los datos con una clave de usuario (EncryptAllWithUserKey) |
Utiliza una clave que se basa en el perfil de usuario actual para cifrar el paquete entero. El usuario que creó o exportó el paquete es el único que puede abrirlo en el Diseñador SSIS o ejecutarlo con la utilidad del símbolo del sistema dtexec. Cuando se utiliza con la utilidad dtutil, este nivel de protección corresponde al valor 4.
Nota
Para los niveles de protección que utilizan una clave de usuario, Integration Services utiliza los estándares DPAPI. Para obtener más información acerca de DPAPI, vea MSDN Library en https://msdn.microsoft.com/library.
|
Cifrar la información confidencial con una contraseña (EncryptSensitiveWithPassword) |
Utiliza una contraseña para cifrar sólo los valores de las propiedades confidenciales en el paquete. Para el cifrado, se utiliza DPAPI. Los datos confidenciales se guardan como parte del paquete, pero los datos se cifran utilizando una contraseña que el usuario actual suministra al crear o exportar el paquete. Para abrir el paquete en el Diseñador SSIS, el usuario debe proporcionar la contraseña del paquete. Si no se proporciona la contraseña, el paquete se abre sin los datos confidenciales y el usuario actual debe proporcionar valores nuevos para estos datos. Si el usuario intenta ejecutar el paquete sin proporcionar la contraseña, el paquete no se ejecutará. Para obtener más información acerca de las contraseñas y la ejecución desde la línea de comandos, vea dtexec (utilidad). Cuando se utiliza con la utilidad dtutil, este nivel de protección corresponde al valor 2. |
Cifrar la información confidencial con una clave de usuario (EncryptSensitiveWithUserKey) |
Utiliza una clave que se basa en el perfil de usuario actual para cifrar sólo los valores de las propiedades confidenciales en el paquete. Sólo el mismo usuario que use el mismo perfil puede cargar el paquete. Si un usuario distinto abre el paquete, aparecerán espacios en blanco en el lugar de la información confidencial y usuario actual deberá suministrar valores nuevos para los datos confidenciales. Si el usuario intenta ejecutar el paquete, se generará un error. Para el cifrado, se utiliza DPAPI. Cuando se utiliza con la utilidad dtutil, este nivel de protección corresponde al valor 1.
Nota
Para los niveles de protección que utilizan una clave de usuario, Integration Services utiliza los estándares DPAPI. Para obtener más información acerca de DPAPI, vea MSDN Library en https://msdn.microsoft.com/library.
|
Basar el cifrado en el almacenamiento del servidor (ServerStorage) |
Protege el paquete completo utilizando funciones de base de datos de SQL Server. Esta opción sólo se admite cuando se guarda un paquete en la base de datos msdb de SQL Server. No se admite cuando el paquete se guarda en el sistema de archivos desde Business Intelligence Development Studio. |
Cambiar el nivel de protección basado en el ciclo de vida de paquetes
El nivel de protección de un paquete de SQL ServerIntegration Services se establece cuando se desarrolla por primera vez en Business Intelligence Development Studio. Posteriormente, al implementar, importar o exportar el paquete desde Integration Services en SQL Server Management Studio, o copiarlo desde Business Intelligence Development Studio a SQL Server, el Almacén de paquetes SSIS o el sistema de archivos puede actualizar su nivel de protección. Por ejemplo, si crea y guarda los paquetes en un equipo con una de las opciones de nivel de protección de claves de usuario, es probable que necesite cambiar el nivel de protección al entregar el paquete a otros usuarios; de lo contrario, no podrán abrirlo.
Normalmente, el nivel de protección se cambia como se muestra en los pasos siguientes:
Durante el desarrollo, deje el nivel de protección de los paquetes establecido en el valor predeterminado: EncryptSensitiveWithUserKey. Este valor ayuda a asegurarse de que sólo el programador vea los valores confidenciales del paquete. O bien, puede considerar usar EncryptAllWithUserKey o DontSaveSensitive.
Cuando llegue el momento de implementar los paquetes, tiene que cambiar el nivel de protección por uno que no dependa de la clave de usuario del programador. Por tanto, normalmente tiene que seleccionar EncryptSensitiveWithPassword o EncryptAllWithPassword. Cifre los paquetes asignando una contraseña segura temporal que también conozca el equipo de operaciones del entorno de producción.
Una vez implementados los paquetes en el entorno de producción, el equipo de operaciones puede volver a cifrar los paquetes implementados asignando una contraseña segura que sólo ellos conozcan. O bien, pueden cifrar los paquetes implementados seleccionando EncryptSensitiveWithUserKey o EncryptAllWithUserKey, y utilizando las credenciales locales de la cuenta que ejecutará los paquetes.
|