Esercitazione: Introduzione ad Always Encrypted con enclavi sicure in SQL Server

Si applica a: SQL Server 2019 (15.x) e versioni successive - Solo Windows

Questa esercitazione spiega come iniziare a usare Always Encrypted con enclavi sicure in SQL Server. L'esercitazione spiega:

  • Come creare un ambiente di base per i test e la valutazione di Always Encrypted con enclavi sicure.
  • Come crittografare i dati in locale ed eseguire query avanzate riservate su colonne crittografate usando SQL Server Management Studio (SSMS).

Per informazioni su come configurare Always Encrypted con enclavi sicure usando il Servizio Sorveglianza host per l'attestazione dell'enclave, vedere Esercitazione: Introduzione all'uso di Always Encrypted con enclavi sicure in SQL Server con attestazione tramite HGS

Prerequisiti

Il computer che ospita l'istanza di SQL Server (detto computer con SQL Server) deve soddisfare i requisiti seguenti:

  • SQL Server 2019 (15.x) o versioni successive.
  • Windows 10 o versioni successive; Windows Server 2019 o versioni successive.
  • Supporto CPU per le tecnologie di virtualizzazione:
    • Intel VT-x con Extended Page Tables.
    • AMD-V con Rapid Virtualization Indexing.
    • SQL Server in esecuzione in una VM:
      • In Azure usare una dimensione VM di seconda generazione (scelta consigliata) o una dimensione VM di prima generazione con la virtualizzazione annidata abilitata. Consultare la documentazione sulle dimensioni delle singole VM per determinare le dimensioni di VM di prima generazione che supportano la virtualizzazione annidata.
      • In Hyper-V 2016 o versioni successive (all'esterno di Azure), accertarsi che la VM sia di seconda generazione (scelta consigliata) o di prima generazione con la virtualizzazione annidata. Per altre informazioni, vedere È necessario creare una macchina virtuale di prima o seconda generazione in Hyper-V? e Configurare la virtualizzazione annidata.
      • In VMware vSphere 6.7 o versioni successive, abilitare il supporto della sicurezza basata sulla virtualizzazione (VBS) per la macchina virtuale come descritto nella documentazione di VMware.
      • Anche altri hypervisor e cloud pubblici possono supportare le funzionalità di virtualizzazione annidata che abilitano Always Encrypted con enclave di sicurezza basata sulla virtualizzazione. Vedere la documentazione della soluzione di virtualizzazione per informazioni sulla compatibilità e istruzioni per la configurazione.
  • La versione più recente di SQL Server Management Studio (SSMS). In alternativa è possibile installare SSMS in un altro computer.

Avviso

In ambienti di produzione, l'esecuzione di SSMS o altri strumenti di gestione delle chiavi nel computer SQL Server può ridurre i vantaggi della sicurezza con l'uso di Always Encrypted. In generale, è consigliabile eseguire tali strumenti in un computer diverso. Per altre informazioni, vedere Considerazioni sulla sicurezza per la gestione delle chiavi.

Passaggio 1: Accertarsi che la sicurezza basata su virtualizzazione (VBS) sia abilitata

  1. Accedere al computer con SQL Server come amministratore, aprire una console di Windows PowerShell con privilegi elevati ed eseguire msinfo32.exe. Controllare se VBS è in esecuzione. Se VBS è in esecuzione, ignorare i passaggi rimanenti in questa sezione e passare alla sezione successiva.

    Screenshot of the System Information virtualization-based security details.

  2. Abilitare VBS eseguendo il cmdlet seguente in una sessione di PowerShell.

    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name EnableVirtualizationBasedSecurity -Value 1
    
  3. Se il computer con SQL Server è una macchina virtuale, un computer fisico che non supporta l'avvio sicuro UEFI o un computer fisico sprovvisto di IOMMU, è necessario rimuovere il requisito VBS per le funzionalità di sicurezza della piattaforma. Rimuovere il requisito per l'avvio protetto e IOMMU eseguendo il comando seguente nel computer SQL Server in una console di PowerShell con privilegi elevati:

    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
    
  4. Riavviare il computer con SQL Server per riportare online VBS.

    Restart-Computer
    
  5. Ripetere il passaggio 1 per controllare se VBS è in esecuzione.

Passaggio 2: Abilitare Always Encrypted con enclavi sicure in SQL Server

In questo passaggio si abilita la funzionalità Always Encrypted con enclavi nell'istanza di SQL Server.

  1. Usando SSMS, connettersi all'istanza di SQL Server come sysadmin senza Always Encrypted abilitato per la connessione di database.

    1. Avviare SSMS.

    2. Nella finestra di dialogo Connetti al server specificare il nome del server, selezionare un metodo di autenticazione e specificare le credenziali.

    3. Selezionare Opzioni >> e scegliere la scheda Always Encrypted.

    4. Verificare che la casella di controllo Abilita Always Encrypted (crittografia colonna)non sia selezionata.

      Screenshot of the SSMS connection option for Always Encrypted disabled.

    5. Selezionare Connetti.

  2. Aprire una nuova finestra di query ed eseguire l'istruzione seguente per impostare il tipo di enclave sicura sulla sicurezza basata sulla virtualizzazione (VBS).

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Riavviare l'istanza di SQL Server per rendere effettive le modifiche. Per riavviare l'istanza in SQL Server Management Studio, fare clic con il pulsante destro del mouse su di essa in Esplora oggetti e scegliere Riavvia. Dopo il riavvio dell'istanza, riconnettersi.

  4. Verificare che l'enclave sicuro sia ora caricato eseguendo la query seguente:

    SELECT [name], [value], [value_in_use] FROM sys.configurations
    WHERE [name] = 'column encryption enclave type';
    

    La query deve restituire il risultato seguente:

    name value value_in_use
    column encryption enclave type 1 1

Passaggio 3: Creare un database di esempio

In questo passaggio si crea un database con alcuni dati di esempio che verranno crittografati in un secondo momento.

  1. Usando l'istanza di SSMS nel passaggio precedente, eseguire l'istruzione seguente in una finestra di query per creare un nuovo database, denominato ContosoHR.

    CREATE DATABASE [ContosoHR];
    
  2. Creare una nuova tabella con nome Employees.

    USE [ContosoHR];
    GO
    
    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];
    
  3. Aggiungere alcuni record dei dipendenti alla tabella Employees.

    USE [ContosoHR];
    GO
    
    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 4: Effettuare il provisioning delle chiavi abilitate per l'enclave

In questo passaggio si crea una chiave master della colonna e una chiave di crittografia della colonna che consentono i calcoli delle enclavi.

  1. Usando l'istanza di SSMS nel passaggio precedente, in Esplora oggetti espandere il database e passare a Sicurezza>Chiavi Always Encrypted.

  2. Effettuare il provisioning di una nuova chiave master della colonna abilitata per l'enclave:

    1. Fare clic con il pulsante destro del mouse su Chiavi Always Encrypted e scegliere Nuova chiave master della colonna.

    2. Selezionare il nome della chiave master della colonna: CMK1.

    3. Assicurarsi di selezionare Archivio certificati Windows (Utente corrente o Computer locale) o Azure Key Vault.

    4. Selezionare Consenti calcoli enclave.

    5. Se si seleziona Azure Key Vault, accedere ad Azure e selezionare l'insieme di credenziali delle chiavi. Per altre informazioni su come creare un insieme di credenziali delle chiavi per Always Encrypted, vedere Manage your key vaults from Azure portal (Gestire gli insiemi di credenziali delle chiavi dal portale di Azure).

    6. Selezionare il certificato o la chiave di Azure Key Vault, se esiste già, oppure selezionare il pulsante Genera certificato per crearne uno nuovo.

    7. Seleziona OK.

      Screenshot of the allow enclave computations selection in SSMS when creating a new column master key.

  3. Creare una nuova chiave di crittografia di colonna abilitata per l'enclave:

    1. Fare clic con il pulsante destro del mouse su Chiavi Always Encrypted e scegliere Nuova chiave di crittografia della colonna.
    2. Inserire un nome per la nuova chiave di crittografia della colonna: CEK1.
    3. Nell'elenco a discesa Chiave master della colonna selezionare la chiave master della colonna creata nei passaggi precedenti.
    4. Seleziona OK.

Passaggio 5: Crittografare alcune colonne in-place

In questo passaggio si esegue la crittografia dei dati archiviati nelle colonne SSN e Salary all'interno dell'enclave lato server, quindi si esegue il test di una query SELECT sui dati.

  1. Aprire una nuova istanza di SSMS e connettersi all'istanza di SQL Server con Always Encrypted abilitato per la connessione di database.

    1. Avviare una nuova istanza di SSMS.

    2. Nella finestra di dialogo Connetti al server specificare il nome del server, selezionare un metodo di autenticazione e specificare le credenziali.

    3. Selezionare Opzioni >> e scegliere la scheda Always Encrypted.

    4. Selezionare la casella di controllo Abilita Always Encrypted (crittografia della colonna).

    5. Selezionare Abilita enclavi sicure.

    6. Impostare Protocollo su Nessuno.

      Screenshot of the connect to server Always Encrypted tab without attestation using SSMS.

    7. Selezionare Connetti.

    8. Se viene chiesto di abilitare la parametrizzazione per le query Always Encrypted, selezionare Abilita.

  2. Usando la stessa istanza di SSMS (con Always Encrypted abilitato), aprire una nuova finestra di query e crittografare le colonne SSN e Salary eseguendo le query seguenti.

    USE [ContosoHR];
    GO
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [Salary] [money]
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    

    Nota

    Si noti l'istruzione ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE per cancellare la cache del piano di query per il database nello script precedente. Dopo aver modificato la tabella è necessario cancellare i piani per tutti i batch e le stored procedure che accedono alla tabella per aggiornare le informazioni di crittografia dei parametri.

  3. Per verificare che le colonne SSN e Salary ora sono crittografate, aprire una nuova finestra di query nell'istanza di SSMS senza Always Encrypted abilitato per la connessione di database ed eseguire l'istruzione seguente. La finestra di query restituirà valori crittografati nelle colonne SSN e Salary. Se si esegue la stessa query usando l'istanza di SSMS con Always Encrypted abilitato, verranno visualizzati i dati decrittografati.

    SELECT * FROM [HR].[Employees];
    

Passaggio 6: Eseguire query avanzate per colonne crittografate

Ora è possibile eseguire query avanzate sulle colonne crittografate. Vengono eseguite alcune operazioni di elaborazione query nell'enclave lato server.

  1. Nell'istanza di SSMS con Always Encrypted abilitato verificare che la parametrizzazione per Always Encrypted sia abilitata.

    1. Selezionare Strumenti dal menu principale di SSMS.
    2. Selezionare Opzioni.
    3. Passare a Esecuzione query>SQL Server>Avanzata.
    4. Assicurarsi che l'opzione Abilita parametrizzazione per Always Encrypted sia selezionata.
    5. Seleziona OK.
  2. Aprire una nuova finestra di query, incollare ed eseguire la query seguente. La query restituisce valori di testo non crittografato e righe che soddisfano i criteri di ricerca specificati.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Riprovare la stessa query nell'istanza di SSMS senza Always Encrypted abilitato e notare l'errore che si verifica.

Passaggi successivi

Al termine dell'esercitazione, è possibile passare a una delle esercitazioni seguenti:

Vedi anche