Usare Connettore SQL Server con le funzionalità di crittografia SQLUse SQL Server Connector with SQL Encryption Features

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)noDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Le attività di crittografia SQL ServerSQL Server comuni che usano una chiave asimmetrica protetta dall'insieme di credenziali delle chiavi di Azure includono le tre aree seguenti.Common SQL ServerSQL Server encryption activities using an asymmetric key protected by the Azure Key Vault include the following three areas.

  • Transparent Data Encryption con una chiave asimmetrica dell'insieme di credenziali delle chiavi di AzureTransparent Data Encryption by using an Asymmetric Key from Azure Key Vault

  • Crittografia dei backup tramite una chiave asimmetrica dell'insieme di credenziali delle chiaviEncrypting Backups by Using an Asymmetric Key from the Key Vault

  • Crittografia a livello di colonna tramite una chiave asimmetrica dell'insieme di credenziali delle chiaviColumn Level Encryption by Using an Asymmetric Key from the Key Vault

    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.Complete parts I through IV of the topic Setup Steps for Extensible Key Management Using the Azure Key Vault, before following the steps on this topic.

Nota

Le versioni 1.0.0.440 e precedenti sono state sostituite e non sono più supportate in ambienti di produzione.Versions 1.0.0.440 and older have been replaced and are no longer supported in production environments. 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 del Connettore SQL Server in "Aggiornamento del Connettore SQL Server".Upgrade to version 1.0.1.0 or later by visiting the Microsoft Download Center and using the instructions on the SQL Server Connector Maintenance & Troubleshooting page under “Upgrade of SQL Server Connector.”

Transparent Data Encryption con una chiave asimmetrica dell'insieme di credenziali delle chiavi di AzureTransparent Data Encryption by using an Asymmetric Key from Azure Key Vault

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.After completing Parts I through IV of the topic Setup Steps for Extensible Key Management Using the Azure Key Vault, use the Azure Key Vault key to encrypt the database encryption key using TDE.
È 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.You will need to create a credential and a login, and create a database encryption key which will encrypt the data and logs in the database. Per crittografare un database è necessaria l'autorizzazione CONTROL per il database.To encrypt a database requires CONTROL permission on the database. L'immagine seguente mostra la gerarchia della chiave di crittografia quando si usa l'insieme di credenziali delle chiavi di Azure.The following graphic shows the hierarchy of the encryption key when using the Azure Key Vault.

ekm-key-hierarchy-with-akvekm-key-hierarchy-with-akv

  1. Creare credenziali di SQL ServerSQL Server per il motore di database da usare per TDECreate a SQL ServerSQL Server credential for the Database Engine to use for TDE

    Il motore di Database usa le credenziali per accedere all'insieme di credenziali delle chiavi durante il caricamento del database.The Database Engine uses the credential to access the Key Vault during database load. Si consiglia di creare un altro ID client e un altro segreto di Azure Active Directory nella parte 1 per Motore di databaseDatabase Engineper limitare le autorizzazioni concesse per l'insieme di credenziali delle chiavi.We recommend creating another Azure Active Directory Client ID and Secret in Part I for the Motore di databaseDatabase Engine, to limit the Key Vault permissions that are granted.

    Modificare lo script Transact-SQLTransact-SQL sottostante nei modi seguenti:Modify the Transact-SQLTransact-SQL script below in the following ways:

    • Modificare l'argomento IDENTITY (ContosoDevKeyVault) in modo che punti all'insieme di credenziali delle chiavi di Azure.Edit the IDENTITY argument (ContosoDevKeyVault) to point to your Azure Key Vault.

      • Se si usa Azure pubblico, sostituire l'argomento IDENTITY con il nome dell'insieme di credenziali delle chiavi di Azure della parte II.If you're using public Azure, replace the IDENTITY argument with the name of your Azure Key Vault from Part II.
      • Se si usa un cloud privato di Azure , ad esempioIf you're using a private Azure cloud (ex. Azure per enti pubblici, Azure Cina o Azure Germania, sostituire l'argomento IDENTITY con l'URI dell'insieme di credenziali restituito nella parte II, passaggio 3.Azure Government, Azure China, or Azure Germany), replace the IDENTITY argument with the Vault URI that is returned in Part II, step 3. Non includere "https://" nell'URI dell'insieme di credenziali.Do not include "https://" in the Vault URI.
    • Sostituire la prima parte dell'argomento SECRET con l' ID client di Azure Active Directory della parte 1. In questo esempio l' ID client è EF5C8E094D2A4A769998D93440D8115D.Replace the first part of the SECRET argument with the Azure Active Directory Client ID from Part I. In this example, the Client ID is EF5C8E094D2A4A769998D93440D8115D.

      Importante

      È necessario rimuovere i trattini dall' ID Client.You must remove the hyphens from the Client ID.

    • 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.Complete the second part of the SECRET argument with Client Secret from Part I. In this example the Client Secret from Part 1 is Replace-With-AAD-Client-Secret. La stringa finale dell'argomento SECRET sarà una lunga sequenza di lettere e numeri senza trattini.The final string for the SECRET argument will be a long sequence of letters and numbers, with no hyphens.

    USE master;  
    CREATE CREDENTIAL Azure_EKM_TDE_cred   
        WITH IDENTITY = 'ContosoDevKeyVault', -- for public Azure
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Azure China
        -- 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 ServerSQL Server per Motore di databaseDatabase Engine per TDECreate a SQL ServerSQL Server login for the Motore di databaseDatabase Engine for TDE

    Creare un account di accesso di SQL ServerSQL Server e aggiungere le credenziali del passaggio 1.Create a SQL ServerSQL Server login and add the credential from Step 1 to it. Questo esempio di Transact-SQLTransact-SQL usa la stessa chiave importata in precedenza.This Transact-SQLTransact-SQL example uses the same key that was imported earlier.

    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)Create the Database Encryption Key (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.The DEK will encrypt your data and log files in the database instance, and in turn be encrypted by the Azure Key Vault asymmetric key. La chiave DEK può essere creata usando qualsiasi lunghezza dell'algoritmo o della chiave supportata da SQL ServerSQL Server .The DEK can be created using any SQL ServerSQL Server supported algorithm or key length.

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

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

    Con Management StudioManagement Studio, verificare che TDE sia attivato connettendo il database con Esplora oggetti.Using Management StudioManagement Studio, verify that TDE has been turned on by connecting to your database with Object Explorer. Fare clic con il pulsante destro del mouse sul database, scegliere Attivitàe quindi fare clic su Gestisci crittografia del database.Right-click your database, point to Tasks, and then click Manage Database Encryption.

    ekm-tde-object-explorerekm-tde-object-explorer

    Nella finestra di dialogo Gestisci crittografia del database confermare che TDE è attivo e specificare la chiave asimmetrica che sta crittografando DEK.In the Manage Database Encryption dialog box, confirm that TDE is on, and what asymmetric key is encrypting the DEK.

    ekm-tde-dialog-boxekm-tde-dialog-box

    In alternativa, è possibile eseguire lo script Transact-SQLTransact-SQL seguente.Alternatively, you can execute the following Transact-SQLTransact-SQL script. Uno stato di crittografia 3 indica un database crittografato.An encryption state of 3 indicates an encrypted database.

    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.The tempdb database is automatically encrypted whenever any database enables TDE.

Crittografia dei backup tramite una chiave asimmetrica dell'insieme di credenziali delle chiaviEncrypting Backups by Using an Asymmetric Key from the Key Vault

I backup crittografati sono supportati a partire da SQL Server 2014SQL Server 2014.Encrypted backups are supported starting with SQL Server 2014SQL Server 2014. L'esempio seguente crea e ripristina un backup crittografato di una chiave DEK protetta dalla chiave asimmetrica nell'insieme di credenziali delle chiavi.The following example creates and restores a backup encrypted a data encryption key protected by the asymmetric key in the key vault.
Motore di databaseDatabase Engine richiede le credenziali quando si accede all'insieme di credenziali delle chiavi durante il caricamento del database.The Motore di databaseDatabase Engine needs the credential when accessing the Key Vault during database load. Si consiglia di creare un altro ID client e un altro segreto di Azure Active Directory nella parte 1 per il motore di database per limitare le autorizzazioni concesse per l'insieme di credenziali delle chiavi.We recommend creating another Azure Active Directory Client ID and Secret in Part I for the Database Engine, to limit the Key Vault permissions that are granted.

  1. Creare credenziali di SQL Server per il motore di database da usare per la crittografia dei backupCreate a SQL Server credential for the Database Engine to use for Backup Encryption

    Modificare lo script Transact-SQLTransact-SQL sottostante nei modi seguenti:Modify the Transact-SQLTransact-SQL script below in the following ways:

    • Modificare l'argomento IDENTITY (ContosoDevKeyVault) in modo che punti all'insieme di credenziali delle chiavi di Azure.Edit the IDENTITY argument (ContosoDevKeyVault) to point to your Azure Key Vault.

      • Se si usa Azure pubblico, sostituire l'argomento IDENTITY con il nome dell'insieme di credenziali delle chiavi di Azure della parte II.If you're using public Azure, replace the IDENTITY argument with the name of your Azure Key Vault from Part II.
      • Se si usa un cloud privato di Azure , ad esempioIf you're using a private Azure cloud (ex. Azure per enti pubblici, Azure Cina o Azure Germania, sostituire l'argomento IDENTITY con l'URI dell'insieme di credenziali restituito nella parte II, passaggio 3.Azure Government, Azure China, or Azure Germany), replace the IDENTITY argument with the Vault URI that is returned in Part II, step 3. Non includere "https://" nell'URI dell'insieme di credenziali.Do not include "https://" in the Vault URI.
    • Sostituire la prima parte dell'argomento SECRET con l' ID client di Azure Active Directory della parte 1. In questo esempio l' ID client è EF5C8E094D2A4A769998D93440D8115D.Replace the first part of the SECRET argument with the Azure Active Directory Client ID from Part I. In this example, the Client ID is EF5C8E094D2A4A769998D93440D8115D.

      Importante

      È necessario rimuovere i trattini dall' ID Client.You must remove the hyphens from the Client ID.

    • 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.Complete the second part of the SECRET argument with Client Secret from Part I. In this example the Client Secret from Part I is Replace-With-AAD-Client-Secret. La stringa finale dell'argomento SECRET sarà una lunga sequenza di lettere e numeri senza trattini.The final string for the SECRET argument will be a long sequence of letters and numbers, with no hyphens.

      USE master;  
      
      CREATE CREDENTIAL Azure_EKM_Backup_cred   
          WITH IDENTITY = 'ContosoDevKeyVault', -- for public Azure
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Azure China
          -- 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 ServerSQL Server per Motore di databaseDatabase Engine per la crittografia dei backupCreate a SQL ServerSQL Server login for the Motore di databaseDatabase Engine for Backup Encryption

    Creare un account di accesso di SQL ServerSQL Server da usare per Motore di databaseDatabase Enginee per i backup di crittografia e aggiungere le credenziali del passaggio 1.Create a SQL ServerSQL Server login to be used by the Motore di databaseDatabase Enginee for encryption backups, and add the credential from Step 1 to it. Questo esempio di Transact-SQLTransact-SQL usa la stessa chiave importata in precedenza.This Transact-SQLTransact-SQL example uses the same key that was imported earlier.

    Importante

    Non è possibile usare la stessa chiave asimmetrica per la crittografia dei backup se è già stata usata per la crittografia TDE (esempio precedente) o per la crittografia a livello di colonna (esempio successivo).You cannot use the same asymmetric key for backup encryption if you’ve already used that key for TDE (the above example) or column level Encryption (the following example).

    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.This example uses the CONTOSO_KEY_BACKUP asymmetric key stored in the key vault, which can be imported or created earlier for the master database, as Part IV, Step 5 earlier.

    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 databaseBackup the Database

    Eseguire il backup del database specificando la crittografia con la chiave simmetrica archiviata nell'insieme di credenziali delle chiavi.Backup the database specifying encryption with the asymmetric key stored in the key vault.

    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.In the below example, note that if the database was already encrypted with TDE, and the asymmetric key CONTOSO_KEY_BACKUP is different from the TDE asymmetric key, the backup will be encrypted by both the TDE asymmetric key and CONTOSO_KEY_BACKUP. L'istanza di SQL ServerSQL Server di destinazione dovrà disporre di entrambe le chiavi per decrittografare il backup.The target SQL ServerSQL Server instance will need both keys in order to decrypt the 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 databaseRestore the Database

    Per ripristinare un backup del database crittografato con TDE, l'istanza di SQL ServerSQL Server di destinazione deve prima di tutto disporre di una copia della chiave dell'insieme di credenziali asimmetrica usata per la crittografia.To restore a database backup that is encrypted with TDE, the target SQL ServerSQL Server instance must first have a copy of the asymmetric Key Vault key used for encryption. Ecco come si ottiene questo risultato:This is how this would be achieved:

    • 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.If the original asymmetric key used for TDE is no longer in Key Vault, restore the Key Vault key backup or reimport the key from a local HSM. 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 chiave originale.Important: In order to have the key’s thumbprint match the thumbprint recorded on the database backup, the key must be named the same Key Vault key name as it was originally named before.

    • Applicare i passaggi 1 e 2 nell'istanza SQL ServerSQL Server di destinazione.Apply Steps 1 and 2 on the target SQL ServerSQL Server instance.

    • Quando l'istanza di SQL ServerSQL Server di destinazione ha accesso alle chiavi asimmetriche usate per crittografare il backup, ripristinare il database nel server.Once the target SQL ServerSQL Server instance has access to the asymmetric key(s) used to encrypt the backup, restore the database on the server.

      Esempio del codice di ripristino:Sample restore code:

    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).For more information about backup options, see BACKUP (Transact-SQL).

Crittografia a livello di colonna tramite una chiave asimmetrica dell'insieme di credenziali delle chiaviColumn Level Encryption by Using an Asymmetric Key from the Key Vault

L'esempio seguente crea una chiave simmetrica protetta dalla chiave asimmetrica nell'insieme di credenziali delle chiavi.The following example creates a symmetric key protected by the asymmetric key in the key vault. La chiave simmetrica viene quindi usata per crittografare i dati nel database.Then the symmetric key is used to encrypt data in the database.

Importante

Non è possibile usare la stessa chiave asimmetrica per la crittografia dei backup se è già stata usata per la crittografia TDE o dei backup (esempi precedenti).You cannot use the same asymmetric key for backup encryption if you’ve already used that key for TDE or backup encryption (the preceding examples).

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.This example uses the CONTOSO_KEY_COLUMNS asymmetric key stored in the key vault, which can be imported or created earlier, as described in Step 3, section 3 of Setup Steps for Extensible Key Management Using the Azure Key Vault. 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.To use this asymmetric key in the ContosoDatabase database, you must execute the CREATE ASYMMETRIC KEY statement again, to provide the ContosoDatabase database with a reference to the key.

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;  

Vedere ancheSee Also

Procedura di installazione di Extensible Key Management con l'insieme di credenziali delle chiavi di Azure Setup Steps for Extensible Key Management Using the Azure Key Vault
Extensible Key Management tramite l'insieme di credenziali delle chiavi di Azure Extensible Key Management Using Azure Key Vault
Opzione di configurazione del server EKM provider enabled EKM provider enabled Server Configuration Option
Manutenzione e risoluzione dei problemi del Connettore SQL Server SQL Server Connector Maintenance & Troubleshooting