Partilhar via


Carregue dados criptografados em massa para colunas usando Always Encrypted

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure

Para carregar dados criptografados sem executar verificações de metadados no servidor durante operações de cópia em massa, crie o usuário com a ALLOW_ENCRYPTED_VALUE_MODIFICATIONS opção. Esta opção destina-se a ser usada por ferramentas herdadas ou fluxos de trabalho ETL (Extract-Transform-Load) de terceiros que não podem usar Always Encrypted. Isso permite que um usuário mova com segurança dados criptografados de um conjunto de tabelas, contendo colunas criptografadas, para outro conjunto de tabelas com colunas criptografadas (no mesmo banco de dados ou em um banco de dados diferente).

A opção ALLOW_ENCRYPTED_VALUE_MODIFICATIONS

Tanto CREATE USER como ALTER USER têm uma ALLOW_ENCRYPTED_VALUE_MODIFICATIONS opção. Quando definida como ON (o padrão é OFF), essa opção suprime verificações de metadados criptográficos no servidor em operações de cópia em massa, o que permite ao usuário copiar dados criptografados em massa entre tabelas ou bancos de dados, sem descriptografar os dados.

Cenários de migração de dados

A tabela a seguir mostra as configurações recomendadas apropriadas para vários cenários de migração.

Captura de tela de uma tabela mostrando as configurações recomendadas apropriadas para vários cenários de migração.

Carregar dados criptografados em massa

Use o seguinte processo para carregar dados criptografados.

  1. Defina a opção como ON para o usuário no banco de dados que é o destino para a operação de cópia em massa. Por exemplo:

     ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON;
    
  2. Execute a sua aplicação ou ferramenta de cópia em massa ligando-se como esse utilizador. (Se seu aplicativo usa um driver de cliente habilitado para Always Encrypted, verifique se a cadeia de conexão da fonte de dados não contém column encryption setting=enabled para garantir que os dados recuperados de colunas criptografadas permaneçam criptografados. Para obter mais informações, consulte Desenvolver aplicativos usando Always Encrypted.)

  3. Redefina a ALLOW_ENCRYPTED_VALUE_MODIFICATIONS opção novamente para OFF. Por exemplo:

    ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;
    

Potencial de corrupção de dados

O uso indevido desta opção pode levar à corrupção de dados. A ALLOW_ENCRYPTED_VALUE_MODIFICATIONS opção permite que o usuário insira quaisquer dados em colunas criptografadas no banco de dados, incluindo dados criptografados com chaves diferentes, criptografados incorretamente ou não criptografados. Se o usuário copiar acidentalmente os dados que não estão corretamente criptografados usando o esquema de criptografia (chave de criptografia de coluna, algoritmo, tipo de criptografia) configurado para a coluna de destino, você não poderá descriptografar os dados (os dados estão corrompidos). Esta opção deve ser usada com cuidado, pois pode levar à corrupção de dados no banco de dados.

O cenário a seguir demonstra como a importação incorreta de dados pode levar à corrupção de dados:

  1. A opção é definida como ON para um usuário.

  2. O usuário executa o aplicativo que se conecta ao banco de dados. O aplicativo usa APIs em massa para inserir valores de texto sem formatação em colunas criptografadas. O aplicativo espera que um driver de cliente habilitado para Always Encrypted criptografe os dados na inserção. No entanto, o aplicativo está configurado incorretamente, de modo que ele acaba usando um driver que não suporta Always Encrypted ou a cadeia de conexão não contém column encryption setting=enabled.

  3. O aplicativo envia valores de texto sem formatação para o servidor. Como as verificações de metadados criptográficos são desabilitadas no servidor para o usuário, o servidor permite que os dados incorretos (texto sem formatação em vez de texto cifrado corretamente criptografado) sejam inseridos em uma coluna criptografada.

  4. O mesmo ou outro aplicativo se conecta ao banco de dados usando um driver habilitado para Always Encrypted e com column encryption setting=enabled na cadeia de conexão, e recupera os dados. A aplicação espera que os dados sejam desencriptados de forma transparente. No entanto, o driver não consegue descriptografar os dados porque os dados são texto cifrado incorreto.

Melhores práticas

Use contas de usuário designadas para cargas de trabalho de longa duração usando essa opção.

Para aplicativos ou ferramentas de cópia em massa de curta duração que precisam mover dados criptografados sem descriptografá-los, defina a opção como ON imediatamente antes de executar o aplicativo e defina-o de volta para OFF imediatamente após executar a operação.

Não use essa opção para desenvolver novos aplicativos. Em vez disso, use um driver de cliente que ofereça uma API para suprimir verificações de metadados criptográficos para uma única sessão, como a AllowEncryptedValueModifications opção no Provedor de Dados do .NET Framework para SQL Server - consulte Copiando dados criptografados usando SqlBulkCopy.