Usare Connettore SQL Server con le funzionalità di crittografia SQL

Si applica a:SQL Server

Le attività comuni di crittografia di SQL Server che usano una chiave asimmetrica protetta da Azure Key Vault includono le tre aree seguenti.

  • Transparent Data Encryption con una chiave asimmetrica dell'insieme di credenziali delle chiavi di Azure

  • Crittografia dei backup tramite una chiave asimmetrica dell'insieme di credenziali delle chiavi

  • Crittografia a livello di colonna tramite una chiave asimmetrica dell'insieme di credenziali delle chiavi

Completare le parti dalla 1 alla 4 dell'argomento Procedura di installazione di Extensible Key Management con l'insieme di credenziali delle chiavi di Azureprima di seguire la procedura di questo argomento.

Nota

Le versioni 1.0.0.440 e precedenti sono state sostituite e non sono più supportate negli ambienti di produzione. Eseguire l'aggiornamento alla versione 1.0.1.0 o successiva visitando l'Area download Microsoft e seguendo le istruzioni nella pagina Manutenzione e risoluzione dei problemi di Connettore SQL Server in "Aggiornamento del Connettore SQL Server".

Nota

Microsoft Entra ID era precedentemente noto come Azure Active Directory (Azure AD).

Transparent Data Encryption con una chiave asimmetrica dell'insieme di credenziali delle chiavi di Azure

Dopo aver completato le parti dalla 1 alla 4 dell'argomento Procedura di installazione di Extensible Key Management con l'insieme di credenziali delle chiavi di Azure, usare la chiave dell'insieme di credenziali delle chiavi di Azure per crittografare la chiave di crittografia del database con TDE. Per altre informazioni sulla rotazione delle chiavi con PowerShell, vedere Ruotare la protezione TDE (Transparent Data Encryption) con PowerShell.

Importante

Non eliminare le versioni precedenti della chiave dopo un rollover. Quando si esegue il roll over delle chiavi, alcuni dati vengono ancora crittografati con le chiavi precedenti, ad esempio backup di database meno recenti, file di log di backup e file di log delle transazioni.

È necessario creare le credenziali e un account di accesso, nonché una chiave di crittografia del database che consente di crittografare i dati e i log nel database. Per crittografare un database è necessaria l'autorizzazione CONTROL per il database. L'immagine seguente mostra la gerarchia della chiave di crittografia quando si usa l'insieme di credenziali delle chiavi di Azure.

Diagram showing the hierarchy of the encryption key when using the Azure Key Vault.

  1. Creare credenziali di SQL Server per il motore di database da usare per TDE

    Il motore di database usa le credenziali dell'applicazione Microsoft Entra per accedere all'insieme di credenziali delle chiavi durante il caricamento del database. È consigliabile creare un altro ID client e un altro segreto, come descritto nel passaggio 1, per l'motore di database, per limitare le autorizzazioni di Key Vault concesse.

    Modificare lo script Transact-SQL seguente nei modi seguenti:

    • Modificare l'argomento IDENTITY (ContosoDevKeyVault) in modo che punti all'insieme di credenziali delle chiavi di Azure.

      • Se si usa Azure globale, sostituire l'argomento IDENTITY con il nome di Azure Key Vault dalla parte II.
      • Se si usa un cloud privato di Azure (ad esempio, Azure per enti pubblici, Azure gestito da 21Vianet o Azure Germania), sostituire l'argomento con l'URI dell'insieme IDENTITY di credenziali restituito nella parte II, passaggio 3. Non includere "https://" nell'URI dell'insieme di credenziali.
    • Sostituire la prima parte dell'argomento SECRET con l'ID client dell'applicazione Microsoft Entra del passaggio 1. In questo esempio l'ID client è EF5C8E094D2A4A769998D93440D8115D.

      Importante

      È necessario rimuovere i trattini dall' ID Client.

    • Completare la seconda parte dell'argomento SECRET con il segreto client della parte I. In questo esempio il segreto client della parte 1 è ReplaceWithAADClientSecret.

    • La stringa finale dell'argomento SECRET sarà una lunga sequenza di lettere e numeri senza trattini.

    USE master;  
    CREATE CREDENTIAL Azure_EKM_TDE_cred   
        WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplaceWithAADClientSecret'   
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;  
    
  2. Creare un account di accesso di SQL Server per il motore di database per TDE

    Creare un account di accesso di SQL Server e aggiungervi le credenziali del passaggio 1. In questo esempio Transact-SQL viene usata la stessa chiave importata in precedenza.

    USE master;  
    -- Create a SQL Server login associated with the asymmetric key   
    -- for the Database engine to use when it loads a database   
    -- encrypted by TDE.  
    CREATE LOGIN TDE_Login   
    FROM ASYMMETRIC KEY CONTOSO_KEY;  
    GO   
    
    -- Alter the TDE Login to add the credential for use by the   
    -- Database Engine to access the key vault  
    ALTER LOGIN TDE_Login   
    ADD CREDENTIAL Azure_EKM_TDE_cred ;  
    GO  
    
  3. Creare la chiave di crittografia del database (DEK)

    La chiave DEK crittografa i file di dati e di log nell'istanza del database e a sua volta viene crittografata dalla chiave asimmetrica dell'insieme di credenziali delle chiavi di Azure. La chiave DEK può essere creata usando qualsiasi algoritmo supportato da SQL Server o la lunghezza della chiave.

    USE ContosoDatabase;  
    GO  
    
    CREATE DATABASE ENCRYPTION KEY   
    WITH ALGORITHM = AES_256   
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;  
    GO  
    
  4. Attivare TDE

    -- Alter the database to enable transparent data encryption.  
    ALTER DATABASE ContosoDatabase   
    SET ENCRYPTION ON;  
    GO  
    

    Usando Management Studio, verificare che TDE sia stato attivato connettendosi al database con Esplora oggetti. Fare clic con il pulsante destro del mouse sul database, scegliere Attivitàe quindi fare clic su Gestisci crittografia del database.

    Screenshot showing Object Explorer with Tasks > Manage Database Encryption selected.

    Nella finestra di dialogo Gestisci crittografia del database confermare che TDE è attivo e specificare la chiave asimmetrica che sta crittografando DEK.

    Screenshot of the Manage Database Encryption dialog box with the Set Database Encryption On option selected and a yellow banner that says Now TDE is turned on.

    In alternativa, è possibile eseguire lo script Transact-SQL seguente. Uno stato di crittografia 3 indica un database crittografato.

    USE MASTER  
    SELECT * FROM sys.asymmetric_keys  
    
    -- Check which databases are encrypted using TDE  
    SELECT d.name, dek.encryption_state   
    FROM sys.dm_database_encryption_keys AS dek  
    JOIN sys.databases AS d  
         ON dek.database_id = d.database_id;  
    

    Nota

    Il database tempdb viene crittografato automaticamente ogni volta che un database abilita TDE.

Crittografia dei backup tramite una chiave asimmetrica dell'insieme di credenziali delle chiavi

I backup crittografati sono supportati a partire da SQL Server 2014 (12.x). L'esempio seguente crea e ripristina un backup crittografato di una chiave DEK protetta dalla chiave asimmetrica nell'insieme di credenziali delle chiavi.
Il motore di database usa le credenziali dell'applicazione Microsoft Entra per accedere all'insieme di credenziali delle chiavi durante il caricamento del database. È consigliabile creare un altro ID client e un altro segreto, come descritto nel passaggio 1, per l'motore di database, per limitare le autorizzazioni di Key Vault concesse.

  1. Creare credenziali di SQL Server per il motore di database da usare per la crittografia dei backup

    Modificare lo script Transact-SQL seguente nei modi seguenti:

    • Modificare l'argomento IDENTITY (ContosoDevKeyVault) in modo che punti all'insieme di credenziali delle chiavi di Azure.

      • Se si usa Azure globale, sostituire l'argomento IDENTITY con il nome di Azure Key Vault dalla parte II.
      • Se si usa un cloud di Azure privato (ad esempio, Azure per enti pubblici, Microsoft Azure gestito da 21Vianet o Azure Germania), sostituire l'argomento con l'URI IDENTITY dell'insieme di credenziali restituito nella parte II, passaggio 3. Non includere "https://" nell'URI dell'insieme di credenziali.
    • Sostituire la prima parte dell'argomento SECRET con l'ID client dell'applicazione Microsoft Entra del passaggio 1. In questo esempio l'ID client è EF5C8E094D2A4A769998D93440D8115D.

      Importante

      È necessario rimuovere i trattini dall' ID Client.

    • Completare la seconda parte dell'argomento SECRET con il segreto client della parte I. In questo esempio il segreto client della parte I è Replace-With-AAD-Client-Secret. La stringa finale dell'argomento SECRET sarà una lunga sequenza di lettere e numeri senza trattini.

      USE master;  
      
      CREATE CREDENTIAL Azure_EKM_Backup_cred   
          WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
          SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret'   
      FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;    
      
  2. Creare un account di accesso di SQL Server per il motore di database per la crittografia del backup

    Creare un account di accesso di SQL Server da usare dall'motore di database per i backup di crittografia e aggiungere le credenziali del passaggio 1. In questo esempio Transact-SQL viene usata la stessa chiave importata in precedenza.

    Importante

    Non è possibile usare la stessa chiave asimmetrica per la crittografia del backup se è già stata usata la chiave per TDE (l'esempio precedente) o la crittografia a livello di colonna (nell'esempio seguente).

    Questo esempio usa la chiave asimmetrica CONTOSO_KEY_BACKUP archiviata nell'insieme di credenziali delle chiavi che può essere importato o creato in precedenza per il database master, come descritto nel passaggio 5 della parte 4 precedente.

    USE master;  
    
    -- Create a SQL Server login associated with the asymmetric key   
    -- for the Database engine to use when it is encrypting the backup.  
    CREATE LOGIN Backup_Login   
    FROM ASYMMETRIC KEY CONTOSO_KEY_BACKUP;  
    GO   
    
    -- Alter the Encrypted Backup Login to add the credential for use by   
    -- the Database Engine to access the key vault  
    ALTER LOGIN Backup_Login   
    ADD CREDENTIAL Azure_EKM_Backup_cred ;  
    GO  
    
  3. Eseguire il backup del database

    Eseguire il backup del database specificando la crittografia con la chiave asimmetrica archiviata nell'insieme di credenziali delle chiavi.

    Nell'esempio seguente si noti che se il database è stato già crittografato con TDE e la chiave asimmetrica CONTOSO_KEY_BACKUP è diversa dalla chiave asimmetrica TDE, il backup verrà crittografato sia con la chiave asimmetrica TDE che con CONTOSO_KEY_BACKUP. L'istanza di SQL Server di destinazione richiederà entrambe le chiavi per decrittografare il backup.

    USE master;  
    
    BACKUP DATABASE [DATABASE_TO_BACKUP]  
    TO DISK = N'[PATH TO BACKUP FILE]'   
    WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD,   
    ENCRYPTION(ALGORITHM = AES_256,   
    SERVER ASYMMETRIC KEY = [CONTOSO_KEY_BACKUP]);  
    GO  
    
  4. Ripristinare il database

    Per ripristinare un backup del database crittografato con TDE, l'istanza di SQL Server di destinazione deve prima disporre di una copia della chiave asimmetrica di Key Vault usata per la crittografia. Ecco come si ottiene questo risultato:

    • Se la chiave asimmetrica originale usata per TDE non è più nell'insieme di credenziali chiave, ripristinare il backup della chiave dell'insieme di credenziali chiave o reimportare la chiave da un modulo HSM locale. Importante: per fare in modo che l'identificazione digitale della chiave corrisponda all'identificazione digitale registrata nel backup del database, la chiave deve avere lo stesso nome della chiave dell'insieme di credenziali delle chiavi originale.

    • Applicare i passaggi 1 e 2 nell'istanza di SQL Server di destinazione.

    • Dopo che l'istanza di SQL Server di destinazione ha accesso alle chiavi asimmetriche usate per crittografare il backup, ripristinare il database nel server.

    Esempio del codice di ripristino:

    RESTORE DATABASE [DATABASE_TO_BACKUP]  
    FROM DISK = N'[PATH TO BACKUP FILE]'   
        WITH FILE = 1, NOUNLOAD, REPLACE;  
    GO  
    

    Per altre informazioni sulle opzioni di backup, vedere BACKUP (Transact-SQL).

Crittografia a livello di colonna tramite una chiave asimmetrica dell'insieme di credenziali delle chiavi

L'esempio seguente crea una chiave simmetrica protetta dalla chiave asimmetrica nell'insieme di credenziali delle chiavi. La chiave simmetrica viene quindi usata per crittografare i dati nel database.

Importante

Non è possibile usare la stessa chiave asimmetrica per la crittografia a livello di colonna se la chiave è già stata usata per la crittografia del backup.

Questo esempio usa la chiave asimmetrica CONTOSO_KEY_COLUMNS archiviata nell'insieme di credenziali delle chiavi che può essere importata o creata in precedenza, come descritto nel passaggio 3 della sezione 3 di Procedura di installazione di Extensible Key Management con l'insieme di credenziali delle chiavi di Azure. Per usare questa chiave asimmetrica nel database ContosoDatabase , è necessario eseguire nuovamente l'istruzione CREATE ASYMMETRIC KEY in modo da fornire al database ContosoDatabase un riferimento alla chiave.

USE [ContosoDatabase];  
GO  
  
-- Create a reference to the key in the key vault  
CREATE ASYMMETRIC KEY CONTOSO_KEY_COLUMNS   
FROM PROVIDER [AzureKeyVault_EKM_Prov]  
WITH PROVIDER_KEY_NAME = 'ContosoDevRSAKey2',  
CREATION_DISPOSITION = OPEN_EXISTING;  
  
-- Create the data encryption key.  
-- The data encryption key can be created using any SQL Server   
-- supported algorithm or key length.  
-- The DEK will be protected by the asymmetric key in the key vault  
  
CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY  
    WITH ALGORITHM=AES_256  
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;  
  
DECLARE @DATA VARBINARY(MAX);  
  
--Open the symmetric key for use in this session  
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY   
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;  
  
--Encrypt syntax  
SELECT @DATA = ENCRYPTBYKEY  
    (  
    KEY_GUID('DATA_ENCRYPTION_KEY'),   
    CONVERT(VARBINARY,'Plain text data to encrypt')  
    );  
  
-- Decrypt syntax  
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));  
  
--Close the symmetric key  
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;  

Vedi anche

Procedura di installazione di Extensible Key Management con l'insieme di credenziali delle chiavi di Azure
Extensible Key Management tramite l'insieme di credenziali delle chiavi di Azure
Opzione di configurazione del server EKM provider enabled
Manutenzione e risoluzione dei problemi di Connettore SQL Server