Usa SQL Server Connector con funzionalità di crittografia di SQL Server

Si applica a:SQL Server

Le attività comuni di crittografia di SQL Server che utilizzano una chiave asimmetrica protetta da Azure Key Vault rientrano nelle seguenti tre aree:

  • Crittografia trasparente dei dati (TDE) utilizzando una chiave asimmetrica di Azure Key Vault.
  • Crittografare i backup utilizzando una chiave asimmetrica dal vault delle chiavi.
  • Crittografia a livello di colonna utilizzando una chiave asimmetrica dal vault delle chiavi.

Completa i passaggi da 1 a 4 di Set up Transparent Data Encryption with Azure Key Vault for SQL Server prima di seguire i passaggi di questo articolo.

Nota

Le versioni 1.0.0.440 e precedenti sono state sostituite e non sono più supportate negli ambienti di produzione. Aggiorna alla versione 1.0.1.0 o successiva. Scarica la versione attuale dal Area download Microsoft e segui le istruzioni nella sezione "Aggiornamento di SQL Server Connector" di manutenzione e risoluzione dei problemi di SQL Server Connector.

Nota

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

Crittografia trasparente dei dati utilizzando una chiave asimmetrica di Azure Key Vault

Dopo aver completato i passaggi da 1 a 4 di configurare Transparent Data Encryption con Azure Key Vault for SQL Server, usa la chiave Azure Key Vault per criptare la chiave di crittografia del database con TDE. Per maggiori informazioni sulla rotazione delle chiavi usando PowerShell, consulta Ruotare il sistema di protezione di Transparent Data Encryption (TDE) usando PowerShell.

Importante

Non eliminare le versioni precedenti della chiave dopo il rollover. Quando le chiavi vengono ruotate, alcuni dati sono ancora criptati con le chiavi precedenti, come backup di database più vecchi, file di log salvati e file di log delle transazioni.

Devi creare una credenziale e un account di accesso, e creare una chiave di crittografia del database che crittografi i dati e il log delle transazioni nel database. Crittare un database richiede il permesso CONTROL sul database. Il grafico seguente mostra la gerarchia della chiave di crittografia quando si utilizza Azure Key Vault.

Diagramma che mostra la gerarchia della chiave di crittografia quando si utilizza Azure Key Vault.

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

    Il motore di database utilizza le credenziali dell'applicazione Microsoft Entra per accedere al vault delle chiavi durante il caricamento del database. Per limitare i permessi di archivio delle chiavi che concedi, crea un altro Client ID e Secret, come descritto nel Passo 1: Configura il modello di autenticazione, per il motore di database.

    Modificare lo script Transact-SQL sottostante nei modi seguenti:

    • Modificare l'argomento IDENTITY (ContosoDevKeyVault) in modo che punti all'Azure Key Vault.

    • Sostituisci la prima parte dell'argomento SECRET con l'ID del client dell'applicazione Microsoft Entra dal Passo 1: Configura il modello di autenticazione. In questo esempio l'ID client è EF5C8E094D2A4A769998D93440D8115D.

      Importante

      È necessario rimuovere i trattini dall' ID Client.

    • Completa la seconda parte dell'argomento SECRET con il Client Secret del passaggio 1. In questo esempio, il Client Secret è ReplaceWithAADClientSecret.

    • La stringa finale dell'argomento SECRET è 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 aggiungere le credenziali del Passaggio 1. Questo esempio di Transact-SQL usa 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. Crea la chiave di crittografia del database (DEK)

    Il DEK cripta i tuoi dati e i file di log nell'istanza del database, e a sua volta viene criptato dalla chiave asimmetrica di Azure Key Vault. Puoi creare il DEK usando qualsiasi algoritmo o lunghezza di chiave supportata da SQL Server.

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

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

    Utilizzando Management Studio, verifica che TDE sia attivato collegandoti al tuo database con Esplora oggetti. Clicca con il tasto destro sul database, punta a Tasks e poi seleziona Gestisci la crittografia del database.

    Screenshot che mostra Esplora oggetti con le opzioni Attività >Gestisci crittografia del database selezionate.

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

    Screenshot della finestra di dialogo Gestisci crittografia del database con l'opzione Attiva crittografia del database selezionata e un banner giallo che indica che ora TDE è attivo.

    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.

Crittografare i backup utilizzando una chiave asimmetrica dal vault delle chiavi

I backup crittografati sono supportati a partire da SQL Server 2014 (12.x). Il seguente esempio crea e ripristina un backup criptato con una chiave di crittografia dati che la chiave asimmetrica nel vault delle chiavi protegge.

Il motore di database utilizza le credenziali dell'applicazione Microsoft Entra per accedere al vault delle chiavi durante il caricamento del database. Per limitare i permessi di archivio delle chiavi che concedi, crea un altro ID client e segreto, come descritto nel Passo 1: Configura il modello di autenticazione, per il motore di database.

  1. Crea una credenziale SQL Server per il motore di database da utilizzare per la crittografia dei backup

    Modificare lo script Transact-SQL sottostante nei modi seguenti:

    • Modificare l'argomento IDENTITY (ContosoDevKeyVault) in modo che punti all'Azure Key Vault.

    • Sostituisci la prima parte dell'argomento SECRET con l'ID del client dell'applicazione Microsoft Entra dal Passo 1: Configura il modello di autenticazione. In questo esempio l'ID client è EF5C8E094D2A4A769998D93440D8115D.

      Importante

      È necessario rimuovere i trattini dall' ID Client.

    • Completa la seconda parte dell'argomento SECRET con il Client Secret del passaggio 1. In questo esempio, il Client Secret è Replace-With-AAD-Client-Secret. La stringa finale dell'argomento SECRET è 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. Crea un login SQL Server per il motore di database per la crittografia di backup

    Creare un account di accesso di SQL Server da usare dal motore di database per i backup di crittografia e aggiungervi le credenziali del passaggio 1. Questo esempio di Transact-SQL usa la stessa chiave importata in precedenza.

    Importante

    Non puoi usare la stessa chiave asimmetrica per la crittografia di backup se già l'hai usata per TDE (l'esempio precedente), o per la crittografia a livello di colonna (l'esempio seguente).

    Questo esempio utilizza la CONTOSO_KEY_BACKUP chiave asimmetrica memorizzata nel key vault, che puoi importare o creare in precedenza per il database master, come descritto nel Passo 2: Crea un key vault.

    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. Fai il backup del database

    Fai il backup del database, specificando la crittografia con la chiave asimmetrica archiviata nel key vault.

    Nel seguente esempio, si noti che se il database era già criptato con TDE, e la chiave asimmetrica CONTOSO_KEY_BACKUP è diversa da quella TDE, il backup è criptato sia dalla chiave asimmetrica TDE sia da CONTOSO_KEY_BACKUP. L'istanza di SQL Server di destinazione ha bisogno di entrambe le chiavi per decifrare 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. Ripristina il database

    Per ripristinare un backup del database criptato con TDE, l'istanza di SQL Server di destinazione deve prima avere una copia della chiave asimmetrica del vault utilizzata per la crittografia. Per fornire quella copia:

    • Se la chiave asimmetrica originale usata per il TDE non è più nel vault delle chiavi, ripristina il backup della chiave del vault o reimporta la chiave da un HSM locale. Affinché l'impronta digitale della chiave corrisponda a quella registrata nel backup del database, la chiave deve utilizzare il nome della chiave del vault delle chiavi originario.

    • Applica i passaggi 1 e 2 all'istanza target di SQL Server.

    • Dopo che l'istanza di SQL Server di destinazione ha accesso alle chiavi asimmetriche usate per criptare il backup, ripristina il database sul 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 utilizzando una chiave asimmetrica dal Key Vault

L'esempio seguente crea una chiave simmetrica protetta dalla chiave asimmetrica nel servizio di gestione delle chiavi. La chiave simmetrica quindi cripta i dati nel database.

Importante

Non puoi usare la stessa chiave asimmetrica per la crittografia a livello di colonna se già hai usato quella chiave per la crittografia di backup.

Questo esempio utilizza la CONTOSO_KEY_COLUMNS chiave asimmetrica memorizzata nell'insieme di credenziali delle chiavi, che puoi importare o creare in precedenza, come descritto nel Passo 2: Crea un insieme di credenziali delle chiavi. Per utilizzare questa chiave asimmetrica nel ContosoDatabase database, esegui nuovamente l'istruzione CREATE ASYMMETRIC KEY per dare al ContosoDatabase database 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;