Caricamento bulk di dati crittografati in colonne tramite Always Encrypted

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

Per caricare i dati crittografati senza eseguire controlli dei metadati sul server durante le operazioni di copia bulk, creare l'utente con l'opzione ALLOW_ENCRYPTED_VALUE_MODIFICATIONS . Questa opzione è destinata all'uso da parte di strumenti legacy o con flussi di lavoro Extract-Transform-Load (ETL) di terze parti che non possono usare Always Encrypted. In questo modo un utente può spostare in sicurezza i dati crittografati da un set di tabelle contenenti colonne crittografate a un altro set di tabelle con colonne crittografate (nello stesso database o in un altro).

Opzione ALLOW_ENCRYPTED_VALUE_MODIFICATIONS

Sia CREATE USER che ALTER USER hanno un'opzione ALLOW_ENCRYPTED_VALUE_MODIFICATIONS. Quando è impostata su ON (il valore predefinito è OFF), questa opzione disattiva i controlli dei dati crittografici sul server nelle operazioni di copia bulk, il che consente all'utente di eseguire la copia bulk dei dati crittografati fra tabelle o database senza decrittografarli.

Scenari di migrazione

La tabella seguente mostra le impostazioni consigliate appropriate per diversi scenari di migrazione.

Screenshot of a table showing the recommended settings appropriate for several migration scenarios.

Caricamento bulk di dati crittografati

Usare la seguente procedura per caricare dati crittografati.

  1. Impostare l'opzione su ON per l'utente nel database di destinazione dell'operazione di copia bulk. Ad esempio:
 ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON;  
  1. Eseguire l'applicazione o lo strumento di copia bulk connettendosi con le credenziali di quell'utente. (Se l'applicazione usa un driver client con Always Encrypted abilitato, verificare che la stringa di connessione per l'origine dati non contenga column encryption setting=enabled per garantire che i dati recuperati dalle colonne crittografate rimangano crittografati. Per ulteriori informazioni, vedere Sviluppare applicazioni con Always Encrypted.)

  2. Impostare di nuovo l'opzione ALLOW_ENCRYPTED_VALUE_MODIFICATIONS su OFF. Ad esempio:

    ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;  
    

Possibile danneggiamento dei dati

L'uso improprio di questa opzione può causare il danneggiamento dei dati. L'opzione ALLOW_ENCRYPTED_VALUE_MODIFICATIONS consente all'utente di inserire dati di qualsiasi tipo in colonne crittografate del database, compresi i dati crittografati con chiavi diverse, crittografati in modo non corretto o non crittografati. Se l'utente copia accidentalmente dati che non sono crittografati in modo corretto usando lo schema di crittografia (chiave di crittografia della colonna, algoritmo, tipo di crittografia) impostato per la colonna di destinazione, non sarà possibile decrittografare i dati (i dati verranno danneggiati). Questa opzione deve essere utilizzata con attenzione, in quanto può causare il danneggiamento dei dati nel database.

Lo scenario seguente dimostra come un'importazione non corretta può causare il danneggiamento dei dati:

  1. L'opzione è impostata su ON per un utente.

  2. L'utente esegue l'applicazione che si connette al database. L'applicazione usa le API bulk per inserire valori di testo normale nelle colonne crittografate. L'applicazione si aspetta che un driver client con Crittografia sempre attiva crittografi i dati durante l'inserimento. L'applicazione, tuttavia, non è configurata correttamente e di conseguenza o usa un driver che non supporta Always Encrypted o la stringa di connessione non contiene column encryption setting=enabled.

  3. L'applicazione invia i valori di testo normale al server. Poiché i controlli dei metadati crittografici sono disattivati nel server per l'utente, il server lascia che i dati non corretti (testo normale anziché testo crittografato) siano inseriti nella colonna crittografata.

  4. La stessa applicazione o un'altra si collega al database usando un driver con Always Encrypted e con column encryption setting=enabled nella stringa di connessione e recupera i dati. L'applicazione si aspetta che i dati siano decrittografati in modo trasparente. Tuttavia, il driver non riesce a decrittografare i dati perché sono costituiti da testo crittografato non corretto.

Procedure consigliate

Usare account utente designati per i carichi di lavoro con esecuzione prolungata.

Per applicazioni o strumenti di copia bulk con esecuzione breve che richiedono di spostare i dati crittografati senza decrittografarli, impostare l'opzione su ON immediatamente prima di eseguire l'applicazione e impostarla di nuovo su OFF immediatamente dopo averla eseguita.

Evitare l'uso di questa opzione per sviluppare nuove applicazioni. Usare invece un driver client che offra un'API per la disattivazione dei controlli dei metadati crittografici per una singola sessione, ad esempio l'opzione AllowEncryptedValueModifications nel provider di dati .NET Framework per SQL Server. Vedere Copia dei dati crittografati mediante SqlBulkCopy.

Passaggi successivi

Vedi anche