Esercitazione: Introduzione a Always Encrypted

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

Questa esercitazione illustra come iniziare a usare Always Encrypted. L’esercitazione illustra:

  • Come crittografare le colonne selezionate nel database.
  • Come eseguire query su colonne crittografate.

Prerequisiti

Per eseguire questa esercitazione, è necessario avere:

Passaggio 1: Creare e popolare lo schema del database

In questo passaggio, si creeranno lo schema HR e la tabella Dipendenti . Verrà quindi popolata la tabella con alcuni dati.

  1. Connettersi al database. Per istruzioni su come connettersi a un database da SSMS, vedere Guida introduttiva: Connettersi ed eseguire query su un database SQL di Azure o su un'istanza gestita di SQL di Azure usando SQL Server Management Studio (SSMS) o Guida introduttiva: Connettersi ed eseguire query su un'istanza di SQL Server usando SQL Server Management Studio (SSMS).

  2. Aprire un nuovo intervallo di query per il database ContosoHR .

  3. Incollare ed eseguire le istruzioni seguenti per creare una nuova tabella, denominata Dipendenti.

    CREATE SCHEMA [HR];
    GO
    
    CREATE TABLE [HR].[Employees]
    (
        [EmployeeID] [int] IDENTITY(1,1) NOT NULL
        , [SSN] [char](11) NOT NULL
        , [FirstName] [nvarchar](50) NOT NULL
        , [LastName] [nvarchar](50) NOT NULL
        , [Salary] [money] NOT NULL
    ) ON [PRIMARY];
    
  4. Incollare ed eseguire le istruzioni seguenti per aggiungere alcuni record dei dipendenti nella tabella Dipendenti.

    INSERT INTO [HR].[Employees]
    (
        [SSN]
        , [FirstName]
        , [LastName]
        , [Salary]
    )
    VALUES
    (
        '795-73-9838'
        , N'Catherine'
        , N'Abel'
        , $31692
    );
    
    INSERT INTO [HR].[Employees]
    (
        [SSN]
        , [FirstName]
        , [LastName]
        , [Salary]
    )
    VALUES
    (
        '990-00-6818'
        , N'Kim'
        , N'Abercrombie'
        , $55415
    );
    

Passaggio 2: Crittografare le colonne

In questo passaggio, si eseguirà il provisioning di una chiave master della colonna e di una chiave di crittografia della colonna per Always Encrypted. Verranno quindi crittografate le colonne SSN e Stipendio nella tabella Dipendenti .

SSMS offre una procedura guidata per configurare facilmente Always Encrypted impostando la chiave master della colonna e la chiave di crittografia della colonna e crittografando le colonne selezionate.

  1. In Esplora oggetti, espandere Databases>ContosoHR>Tabelle.

  2. Fare clic con il pulsante destro del mouse sulla tabella Dipendenti e selezionare Crittografa colonne per aprire la procedura guidata Always Encrypted.

    Screenshot dell’apertura della procedura guidata di Always Encrypted.

  3. Nella pagina Introduzione della procedura guidata, selezionare Avanti.

  4. Nella pagina Selezione colonna.

    1. Selezionare le colonne SSN e Stipendio. Scegliere la crittografia deterministica per la colonna SSN e la crittografia casuale per la colonna Stipendio. La crittografia deterministica supporta le query, ad esempio le ricerche di punti che comportano confronti di uguaglianza sulle colonne crittografate. La crittografia casuale non supporta alcun calcolo sulle colonne crittografate.
    2. Lasciare CEK-Auto1 (New) come chiave di crittografia della colonna per entrambe le colonne. Questa chiave non esiste ancora e verrà generata dalla procedura guidata.
    3. Selezionare Avanti.

    Screenshot di selezione delle colonne per la procedura guidata di Always Encrypted.

  5. Nella pagina Configurazione chiave master, configurare una nuova chiave master della colonna che verrà generata dalla procedura guidata. Prima di tutto, è necessario selezionare la posizione in cui archiviare la chiave master della colonna. La procedura guidata supporta due tipi di archivio di chiavi:

    • Azure Key Vault: consigliato se il database si trova in Azure
    • Archivio certificati Windows

    In generale, Azure Key Vault è l'opzione consigliata, soprattutto se il database si trova in Azure.

    • Per usare Azure Key Vault:

      1. Selezionare Insieme di credenziali delle chiavi di Azure.
      2. Selezionare Accedi e completare l'accesso ad Azure.
      3. Dopo aver eseguito l'accesso, nella pagina verrà visualizzato l'elenco di sottoscrizioni e insiemi di credenziali delle chiavi a cui si ha accesso. Selezionare la sottoscrizione di Azure che contiene l'insieme di credenziali delle chiavi da usare.
      4. Selezionare l'insieme di credenziali delle chiavi.
      5. Selezionare Avanti.

      Screenshot della selezione della chiave master della procedura guidata Always Encrypted con Azure Key Vault.

    • Per usare l'archivio certificati di Windows:

      1. Selezionare Archivio certificati di Windows.

      2. Lasciare la selezione predefinita di Utente corrente. In questo modo, verrà indicato alla procedura guidata di generare un certificato (la nuova chiave master della colonna) nell'archivio Utente corrente.

        Screenshot della selezione della chiave master della procedura guidata Always Encrypted usando l'archivio certificati.

      3. Selezionare Avanti.

  6. Nella pagina Impostazioni della crittografia sul posto, non è necessaria alcuna configurazione aggiuntiva perché il database non dispone di un'enclave abilitata. Selezionare Avanti.

  7. Nella pagina Impostazioni esecuzione test, viene chiesto se si vuole procedere con la crittografia o generare uno script di PowerShell da eseguire in un secondo momento. Lasciare le impostazioni predefinite e selezionare Avanti.

  8. Nella pagina Riepilogo, la procedura guidata comunica le azioni che verranno eseguite. Controllare che tutte le informazioni siano corrette e selezionare Fine.

  9. Nella pagina Risultati è possibile monitorare lo stato delle operazioni della procedura guidata. Attendere il completamento di tutte le operazioni e selezionare Chiudi.

    Screenshot del riepilogo della procedura guidata di Always Encrypted.

  10. (Facoltativo) Esplorare le modifiche apportate dalla procedura guidata nel database.

    1. Espandere ContosoHR>Sicurezza>Chiavi Always Encrypted per esplorare gli oggetti metadati per la chiave master della colonna e la crittografia della colonna creata dalla procedura guidata.

    2. È anche possibile eseguire le query seguenti sulle viste del catalogo di sistema che contengono metadati chiave.

      SELECT * FROM sys.column_master_keys;
      SELECT * FROM sys.column_encryption_keys
      SELECT * FROM sys.column_encryption_key_values
      
    3. In Esplora oggetti, fare clic con il pulsante destro del mouse sulla tabella Dipendenti e selezionare Crea script per tabella>Crea in>Nuova finestra editor di query. Verrà aperto un nuovo intervallo di query con l'istruzione CREATE TABLE per la tabella Dipendenti. Si noti la clausola ENCRYPTED WITH visualizzata nelle definizioni delle colonne SSN e Stipendio.

    4. È anche possibile eseguire la query seguente su sys.columns per riprendere i metadati di crittografia a livello di colonna per le due colonne crittografate.

      SELECT
      [name]
      , [encryption_type]
      , [encryption_type_desc]
      , [encryption_algorithm_name]
      , [column_encryption_key_id]
      FROM sys.columns
      WHERE [encryption_type] IS NOT NULL;
      

Passaggio 3: Eseguire query su colonne crittografate

  1. Connettersi al database con Always Encrypted disabilitato per la connessione.

    1. Aprire una nuova finestra Query.
    2. Fare clic con il pulsante destro del mouse nell'intervallo di query e selezionare Connessione>Cambia connessione. Si aprirà la finestra di dialogo Connessione al motore di database.
    3. Selezionare Opzioni<<. Appariranno delle schede aggiuntive nella finestra di dialogo Connessione al motore di database.
    4. Selezionare la scheda Always Encrypted.
    5. Verificare che Abilita Always Encrypted (crittografia della colonna) non sia selezionata.
    6. Selezionare Connetti.

    Screenshot dell'opzione di connessione SSMS per Always Encrypted disabilitata.

  2. Incollare la query seguente ed eseguirla. La query deve restituire dati crittografati binari.

    SELECT [SSN], [Salary] FROM [HR].[Employees]
    

    Screenshot dei risultati del testo crittografato dalle colonne crittografate.

  3. Connettersi al database con Always Encrypted abilitato per la connessione.

    1. Fare clic con il pulsante destro del mouse nell'intervallo di query e selezionare Connessione>Cambia connessione. Si aprirà la finestra di dialogo Connessione al motore di database.
    2. Selezionare Opzioni<<. Appariranno delle schede aggiuntive nella finestra di dialogo Connessione al motore di database.
    3. Selezionare la scheda Always Encrypted.
    4. Selezionare Abilita Always Encrypted (crittografia della colonna).
    5. Selezionare Connetti.

    Screenshot dell'opzione di connessione SSMS per Always Encrypted abilitata.

  4. Eseguire nuovamente la query. Poiché si è connessi con Always Encrypted abilitato per la connessione al database, il driver client in SSMS tenterà di decriptare i dati archiviati in entrambe le colonne crittografate. Se si usa Azure Key Vault, potrebbe essere richiesto di accedere ad Azure.

    Screenshot dei risultati di testo non crittografato dalle colonne crittografate.

  5. Abilitare Parametrizzazione per Always Encrypted. Questa funzionalità consente di eseguire query che filtrano i dati in base alle colonne crittografate (o inseriscono i dati in colonne crittografate).

    1. Selezionare Query dal menu principale di SQL Server Management Studio.
    2. Selezionare Opzioni query.
    3. Passare a Esecuzione>Avanzata.
    4. Assicurarsi che Abilita parametrizzazione per Always Encrypted sia abilitata.
    5. Seleziona OK.

    Screenshot che abilita la parametrizzazione in una finestra di query esistente.

  6. Incollare ed eseguire la seguente query, che filtra i dati in base alla colonna SSN crittografata. La query deve restituire una riga contenente valori di testo non crittografato.

    DECLARE @SSN [char](11) = '795-73-9838'
    SELECT [SSN], [Salary] FROM [HR].[Employees]
    WHERE [SSN] = @SSN
    
  7. Facoltativamente, se si usa Azure Key Vault configurato con il modello di autorizzazioni dei criteri di accesso, seguire questa procedura per vedere cosa accade quando un utente tenta di riprendere dati di testo non crittografato da colonne crittografate senza avere accesso alla chiave master della colonna che protegge i dati.

    1. Rimuovere l'autorizzazione della chiave unwrap per se stessi nei criteri di accesso per l'insieme di credenziali delle chiavi. Per ulteriori informazioni, vedere Assegnare un criterio di accesso di Key Vault.
    2. Poiché il driver client in SSMS memorizza nella cache le chiavi di crittografia della colonna acquisite da un insieme di credenziali delle chiavi per 2 ore, chiudere SSMS e aprirlo di nuovo. In questo modo, si garantisce che la cache delle chiavi sia vuota.
    3. Connettersi al database con Always Encrypted abilitato per la connessione.
    4. Incollare la query seguente ed eseguirla. La query dovrebbe non riuscire e mostrare il messaggio di errore che indica che manca l'autorizzazione unwrap richiesta.
    SELECT [SSN], [Salary] FROM [HR].[Employees]
    

Passaggi successivi

Vedi anche