Esercitazione: Creare e usare indici sulle colonne abilitate per l'enclave tramite la crittografia casuale

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

In questa esercitazione viene illustrato come creare e usare gli indici sulle colonne abilitate per l'enclave tramite la crittografia casuale supportata in Always Encrypted con enclave sicuri. L'esercitazione spiega:

  • Come creare un indice quando si ha accesso alle chiavi (la chiave master della colonna e la chiave di crittografia della colonna) che proteggono la colonna.
  • Come creare un indice quando non si ha accesso alle chiavi che proteggono la colonna.

Prerequisiti

Scaricare la versione più recente di SQL Server Management Studio (SSMS).

Assicurarsi di aver completato una delle esercitazioni introduttive sull'uso di Always Encrypted con enclave sicuri prima di seguire i passaggi seguenti di questa esercitazione.

Passaggio 1: Abilitare il ripristino accelerato del database (ADR) nel database

Nota

Questo passaggio si applica solo a SQL Server. Se si usa database SQL di Azure, ignorare questo passaggio. Il ripristino accelerato del database viene abilitato automaticamente nel database SQL di Azure e la sua disabilitazione non è supportata.

Microsoft consiglia di abilitare il ripristino accelerato del database nel database prima di creare il primo indice su una colonna abilitata per l'enclave con la crittografia casuale. Vedere la sezione Ripristino del database in Always Encrypted con enclave sicuri.

  1. Chiudere tutte le istanze di SSMS che sono state usate nell'esercitazione precedente. La chiusura di SSMS comporterà la chiusura delle connessioni di database che sono state aperte, come richiesto per abilitare il ripristino accelerato del database.

  2. Aprire una nuova istanza di SSMS e 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 selezionare la scheda Always Encrypted.
    4. Verificare che la casella di controllo Abilita Always Encrypted (crittografia colonna)non sia selezionata.
    5. Selezionare Connetti.
  3. Aprire una nuova finestra di query ed eseguire l'istruzione seguente per abilitare il ripristino accelerato del database.

    ALTER DATABASE ContosoHR SET ACCELERATED_DATABASE_RECOVERY = ON;
    

Passaggio 2: Creare e testare un indice senza la separazione dei ruoli

In questo passaggio verrà creato e testato un indice su una colonna crittografata. Si opererà come un singolo utente che ricopre sia il ruolo di amministratore di database, che gestisce il database, che di proprietario dei dati, che ha accesso alle chiavi che proteggono i 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 selezionare la scheda Always Encrypted.
    4. Selezionare le caselle di controllo Abilitare Always Encrypted (crittografia colonna) e Abilitare enclavi sicure
    5. Se si usa l'attestazione per il database, selezionare un valore di Protocollo di attestazione enclave che rappresenta il servizio di attestazione (Servizio Sorveglianza host o Microsoft attestazione di Azure) e immettere l'URL di attestazione dell'enclave. In caso contrario, selezionare Nessuno.
    6. Selezionare Connetti.
    7. Se viene richiesto di abilitare la parametrizzazione per le query Always Encrypted, selezionare Abilita.
  2. Se non viene richiesto di abilitare la parametrizzazione per Always Encrypted, verificare che 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.
  3. Aprire una finestra di query ed eseguire le istruzioni seguenti per crittografare la colonna LastName nella tabella Employees. Verrà creato e usato un indice su tale colonna nei passaggi successivi.

    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [LastName] [nvarchar](50) COLLATE Latin1_General_BIN2 
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL;
    GO   
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    GO
    
  4. Creare un indice sulla colonna LastName. Poiché si è connessi al database con Always Encrypted abilitato, il driver client all'interno di SSMS fornisce in modo trasparente CEK1 (la chiave di crittografia della colonna, che protegge la colonna LastName) per l'enclave, necessaria per creare l'indice.

    CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName])
    INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]);
    GO
    
  5. Eseguire una query avanzata sulla colonna LastName e verificare che SQL Server usi l'indice quando si esegue la query.

    1. Nella stessa finestra di query o in una nuova verificare che il pulsante Includi statistiche query dinamiche sulla barra degli strumenti sia attivato.

    2. Eseguire la query seguente.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
    3. Nella scheda Statistiche query dinamiche è possibile osservare che la query usa l'indice.

Passaggio 3: Creare un indice con la separazione dei ruoli

In questo passaggio verrà creato un indice su una colonna crittografata, operando come due utenti diversi. Un utente è un amministratore di database, che deve creare un indice, ma non ha accesso alle chiavi. L'altro utente è un proprietario dei dati, che può accedere alle chiavi.

  1. Usando l'istanza di SSMS senza Always Encrypted abilitato, eseguire l'istruzione seguente per eliminare l'indice della colonna LastName.

    DROP INDEX IX_LastName ON [HR].[Employees]; 
    GO
    
  2. Operando come il proprietario dei dati (o un'applicazione che dispone dell'accesso alle chiavi), popolare la cache all'interno dell'enclave con CEK1.

    Nota

    A meno che l'istanza di SQL Server non sia stata riavviata dopo il Passaggio 2: Creare e testare un indice senza la separazione dei ruoli, questo passaggio è superfluo perché CEK1 è già presente nella cache. È stato aggiunto per illustrare come un proprietario dei dati può fornire una chiave per l'enclave, se non è già presente nell'enclave.

    1. Nell'istanza di SSMS con Always Encrypted abilitato eseguire le istruzioni seguenti in una finestra di query. L'istruzione invia all'enclave tutte le chiavi di crittografia delle colonne abilitate per l'enclave. Per informazioni dettagliate, vedere sp_enclave_send_keys.

      EXEC sp_enclave_send_keys;
      GO
      
    2. Come alternativa all'esecuzione della stored procedure precedente, è possibile eseguire una query DML che usa l'enclave sulla colonna LastName. Questa operazione inserirà nell'enclave solo CEK1.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
  3. Operando come amministratore di database, creare l'indice.

    1. Nell'istanza di SSMS senza Always Encrypted abilitato eseguire le istruzioni seguenti in una finestra di query.

      CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName])
      INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]);
      GO
      
  4. Come proprietario dei dati, eseguire una query avanzata sulla colonna LastName e verificare che SQL Server usi l'indice quando si esegue la query.

    1. Nell'istanza di SSMS con Always Encrypted abilitato selezionare una finestra di query esistente o aprirne una nuova e verificare che il pulsante Includi statistiche query dinamiche sulla barra degli strumenti sia attivato.

    2. Eseguire la query seguente.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
    3. In Statistiche query dinamiche è possibile osservare che la query usa l'indice.

Passaggi successivi

Vedi anche