Condividi tramite


Caricamento di dati crittografati in modalità bulk in colonne utilizzando 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 deve essere usata dagli strumenti legacy o dai flussi di lavoro ETL (Extract-Transform-Load) 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).

L'opzione ALLOW_ENCRYPTED_VALUE_MODIFICATIONS

Sia CREATE USER che ALTER USER hanno un'opzione ALLOW_ENCRYPTED_VALUE_MODIFICATIONS . Se impostata su ON (l'impostazione predefinita è OFF), questa opzione elimina i controlli dei metadati crittografici sul server nelle operazioni di copia bulk, che consente all'utente di copiare in blocco i dati crittografati tra tabelle o database, senza decrittografare i dati.

Scenari di migrazione dei dati

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

Screenshot di una tabella che mostra le impostazioni consigliate appropriate per diversi scenari di migrazione.

Caricamento massivo di dati crittografati

Usare la seguente procedura per caricare dati crittografati.

  1. Impostare l'opzione su ON per l'utente nel database di destinazione per l'operazione di copia in blocco. Ad esempio:

     ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON;
    
  2. Eseguire l'applicazione o lo strumento di copia bulk connettendosi con le credenziali di quell'utente. Se l'applicazione usa un driver client abilitato per Always Encrypted, assicurarsi che la stringa di connessione per l'origine dati non contenga column encryption setting=enabled per assicurarsi che i dati recuperati dalle colonne crittografate rimangano crittografati. Per altre informazioni, vedere Sviluppare applicazioni con Always Encrypted.

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

    ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;
    

Potenziale 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 in colonne crittografate nel database, inclusi i dati crittografati con chiavi diverse, crittografati in modo non corretto o non crittografati. Se l'utente copia accidentalmente i dati non crittografati correttamente usando lo schema di crittografia (chiave di crittografia della colonna, algoritmo, tipo di crittografia) configurato per la colonna di destinazione, non è possibile decrittografare i dati (i dati sono 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 funzionalità Always Encrypted abilitata crittografi i dati durante l'inserimento. Tuttavia, l'applicazione non è configurata correttamente, in modo che finisca con un driver che non supporta Always Encrypted o che la stringa di connessione non contenga 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 applicazione si connette al database usando un driver abilitato per 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.

Procedura consigliata

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

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

Non usare questa opzione per lo sviluppo di nuove applicazioni. Usare invece un driver client che offre un'API per eliminare i controlli dei metadati crittografici per una singola sessione, ad esempio l'opzione AllowEncryptedValueModifications in Provider di dati .NET Framework per SQL Server. Vedere Copia di dati crittografati con SqlBulkCopy.