Compartir a través de


Carga masiva de datos cifrados en columnas con Always Encrypted

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Para cargar datos cifrados sin realizar comprobaciones de metadatos en el servidor durante las operaciones de copia masiva, cree el usuario con la ALLOW_ENCRYPTED_VALUE_MODIFICATIONS opción . Esta opción está pensada para usarse en herramientas heredadas o flujos de trabajo de extracción, transformación y carga (ETL) que no pueden usar Always Encrypted. De esta forma, el usuario puede mover de forma segura los datos cifrados de un conjunto de tablas, que contengan las columnas cifradas, a otro conjunto de tablas con columnas cifradas (en la misma base de datos o en otra diferente).

La opción ALLOW_ENCRYPTED_VALUE_MODIFICATIONS

Tanto CREATE USER como ALTER USER tienen una ALLOW_ENCRYPTED_VALUE_MODIFICATIONS opción. Cuando se establece ON en (el valor predeterminado es OFF), esta opción suprime las comprobaciones de metadatos criptográficos en el servidor en operaciones de copia masiva, lo que permite al usuario copiar datos cifrados de forma masiva entre tablas o bases de datos, sin descifrar los datos.

Escenarios de migración de datos

En la siguiente tabla se muestra la configuración recomendada adecuada para varios escenarios de migración.

Captura de pantalla de una tabla que muestra la configuración recomendada adecuada para varios escenarios de migración.

Carga masiva de datos cifrados

Utilice el siguiente proceso para cargar datos cifrados.

  1. Establezca la opción en ON para el usuario de la base de datos que es el destino de la operación de copia masiva. Por ejemplo:

     ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON;
    
  2. Ejecute la herramienta o aplicación de copia masiva que conectándose como ese usuario. (Si la aplicación usa un controlador cliente habilitado para Always Encrypted, asegúrese de que la cadena de conexión del origen de datos no contiene column encryption setting=enabled para asegurarse de que los datos recuperados de las columnas cifradas permanecen cifrados. Para obtener más información, consulte Desarrollo de aplicaciones con Always Encrypted).

  3. Vuelva a establecer la ALLOW_ENCRYPTED_VALUE_MODIFICATIONS opción en OFF. Por ejemplo:

    ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;
    

Potencial de daños en los datos

Si esta opción no se utiliza adecuadamente, pueden dañarse los datos. La ALLOW_ENCRYPTED_VALUE_MODIFICATIONS opción permite al usuario insertar datos en columnas cifradas de la base de datos, incluidos los datos cifrados con claves diferentes, cifrados incorrectamente o no cifrados en absoluto. Si el usuario copia accidentalmente los datos que no están cifrados correctamente mediante el esquema de cifrado (clave de cifrado de columna, algoritmo, tipo de cifrado) configurado para la columna de destino, no se pueden descifrar los datos (los datos están dañados). Esta opción debe utilizarse con cuidado, ya que puede provocar que se dañen los datos de la base de datos.

En el siguiente escenario se muestra cómo importar datos de forma incorrecta podría provocar que se dañen los datos:

  1. La opción se establece en ON para un usuario.

  2. El usuario ejecuta la aplicación que se conecta a la base de datos. La aplicación utiliza las API de operaciones masiva para insertar valores de texto sin formato en las columnas cifradas. La aplicación espera que un controlador cliente con Always Encrypted cifre los datos durante la inserción. Sin embargo, la aplicación está mal configurada, por lo que termina usando un controlador que no admite Always Encrypted o la cadena de conexión no contiene column encryption setting=enabled.

  3. La aplicación envía los valores de texto no cifrado al servidor. Como las comprobaciones de metadatos criptográficos se deshabilitan en el servidor para el usuario, dicho servidor permite que los datos incorrectos (texto no cifrado en lugar de texto cifrado correctamente) se inserten en una columna cifrada.

  4. La misma aplicación u otra aplicación se conecta a la base de datos mediante un controlador habilitado para Always Encrypted y con column encryption setting=enabled en la cadena de conexión y recupera los datos. La aplicación espera que los datos se descifren de forma transparente. Sin embargo, el controlador no puede descifrar los datos porque los datos son texto cifrado de forma incorrecta.

Procedimiento recomendado

Utilice mediante esta opción cuentas de usuario designadas para cargas de trabajo que vayan a ejecutarse durante un largo periodo.

Para aplicaciones o herramientas de copia masiva de corta duración que necesitan mover datos cifrados sin descifrarlos, establezca la opción en ON inmediatamente antes de ejecutar la aplicación y establézcala en OFF inmediatamente después de ejecutar la operación.

No use esta opción para desarrollar aplicaciones nuevas. En su lugar, use un controlador de cliente que ofrezca una API para suprimir las comprobaciones de metadatos criptográficos de una sola sesión, como la AllowEncryptedValueModifications opción en el proveedor de datos de .NET Framework para SQL Server. Consulte Copia de datos cifrados mediante SqlBulkCopy.