Configure Always Encrypted using SQL Server Management Studio (Configurare Always Encrypted usando SQL Server Management Studio)Configure Always Encrypted using SQL Server Management Studio

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

Questo articolo descrive le operazioni necessarie per la configurazione di Always Encrypted e la gestione dei database che usano Always Encrypted con SQL Server Management Studio (SSMS).This article describes tasks for configuring Always Encrypted and managing databases that use Always Encrypted with SQL Server Management Studio (SSMS).

Quando viene usato per configurare Always Encrypted, SSMS gestisce sia le chiavi che i dati sensibili di Always Encrypted in modo tale che vengano visualizzati in testo non crittografato all'interno del processo di SSMS.When you use SSMS to configure Always Encrypted, SSMS handles both Always Encrypted keys and sensitive data, so both the keys and the data appear in plaintext inside the SSMS process. È quindi importante eseguire SSMS in un computer protetto.Therefore, it is important you run SSMS on a secure computer. Se il database è ospitato in SQL Server, verificare che SSMS venga eseguito in un computer diverso da quello che ospita l'istanza di SQL Server.If your database is hosted in SQL Server, make sure SSMS runs on a different computer than the computer hosting your SQL Server instance. Poiché l'obiettivo principale di Always Encrypted è garantire la sicurezza dei dati sensibili crittografati anche se il sistema di database viene compromesso, eseguire uno script di PowerShell che elabora le chiavi o i dati sensibili nel computer SQL Server può ridurre o annullare i vantaggi della funzionalità.As the primary goal of Always Encrypted is to ensure encrypted sensitive data is safe even if the database system gets compromised, executing a PowerShell script that processes keys or sensitive data on the SQL Server computer can reduce or defeat the benefits of the feature. Per altre indicazioni, vedere Considerazioni sulla sicurezza per la gestione delle chiavi.For additional recommendations, see Security Considerations for Key Management.

SQL Server Management Studio non supporta la separazione dei ruoli tra quelli che gestiscono il database (DBA) e quelli che gestiscono i segreti di crittografia e hanno accesso ai dati in testo normale (amministratori della sicurezza e/o di applicazioni).SSMS does not support role separation between those who manage the database (DBAs) and those who manage cryptographic secrets and have access to plaintext data (Security Administrators and/or Application Administrators). Se l'organizzazione applica la separazione dei ruoli, è necessario usare PowerShell per configurare Always Encrypted.If your organization enforces role separation, you should use PowerShell to configure Always Encrypted. Per altre informazioni, vedere Panoramica della gestione delle chiavi per Always Encrypted e Configurare Always Encrypted con PowerShell.For additional information, see Overview of Key Management for Always Encrypted and Configure Always Encrypted using PowerShell.

Configurazione di Always Encrypted con la relativa procedura guidataConfiguring Always Encrypted using the Always Encrypted Wizard

La procedura guidata di Always Encrypted è un potente strumento che consente di impostare la configurazione di crittografia per le colonne di database selezionate.The Always Encrypted Wizard is a powerful tool that allows you to set the desired encryption configuration for selected database columns. In base alla configurazione corrente di Always Encrypted e alla configurazione di destinazione desiderata, la procedura guidata è in grado di crittografare una colonna, rimuovere la crittografia o riapplicarla, ad esempio una nuova chiave di crittografia della colonna o un tipo di crittografia diverso da quello in uso, configurato per la colonna.Depending on the current Always Encrypted configuration and the desired target configuration, the wizard can encrypt a column, decrypt it (remove encryption), or re-encrypt it (for example, using a new column encryption key or an encryption type that is different from the current type, configured for the column). È possibile configurare più colonne in una singola sessione della procedura guidata.Multiple columns can be configured in a single run of the wizard.

Se non è stato eseguito il provisioning tutte le chiavi per Always Encrypted, la procedura guidata le genera automaticamente.If you have not provisioned any keys for Always Encrypted, the wizard will auto-generate them for you. È sufficiente selezionare un archivio chiavi per la chiave master della colonna: archivio certificati di Windows o insieme di credenziali delle chiavi di Azure.You just need to pick a key store for your column master key: Windows Certificate Store or Azure Key Vault. La procedura guidata genererà automaticamente i nomi per le chiavi e i relativi oggetti di metadati nel database.The wizard will auto-generate names for keys and their metadata objects in the database. Per avere un maggiore controllo sulla modalità di provisioning delle chiavi e più possibilità di scelta per un archivio chiavi contenente una chiave master della colonna, è possibile usare le finestre di dialogo Nuova chiave master della colonna e Nuova chiave di crittografia della colonna (descritte di seguito) per eseguire il provisioning delle chiavi prima di iniziare la procedura guidata.If you need more control for how your keys are provisioned (and more choices for a key store containing a column master key), you can use the New Column Master Key and New Column Encryption Key dialogs (described below) to provision keys before you start the wizard. Nella procedura guidata di Always Encrypted è possibile scegliere la chiave di crittografia esistente per la colonna.In the Always Encrypted Wizard, you can then pick the existing column encryption key.

Per informazioni dettagliate sull'uso della procedura guidata, vedere Procedura guidata di Always Encrypted.For details of how to use the wizard, see Always Encrypted Wizard.

Esecuzione di query in colonne crittografateQuerying Encrypted Columns

In questa sezione viene illustrato come eseguire le operazioni seguenti:This section describes how to:

  • Recuperare i valori del testo crittografato archiviati nelle colonne crittografate.Retrieve ciphertext values stored in encrypted columns.
  • Recuperare i valori del testo non crittografato archiviati nelle colonne crittografate.Retrieve plaintext values stored in encrypted columns.
  • Inviare i valori del testo non crittografato destinati alle colonne crittografate (ad esempio nelle istruzioni INSERT o UPDATE e come parametri di ricerca delle clausole WHERE nelle istruzioni SELECT ).Send plaintext values targeting encrypted columns (e.g. in INSERT or UPDATE statements and as a lookup parameters of WHERE clauses in SELECT statements).

Recupero dei valori del testo crittografato archiviati nelle colonne crittografateRetrieving ciphertext values stored in encrypted columns

Per recuperare i valori da una colonna crittografata come testo crittografato (senza decrittografare i valori):To retrieve values from an encrypted column as ciphertext (without decrypting the values):

  1. Assicurarsi che Always Encrypted sia disabilitato per la connessione di database per la finestra dell'editor di query da cui si esegue la query SELECT .Make sure Always Encrypted is disabled for the database connection for the Query Editor window, from which you are running your SELECT query. Vedere la sezione Abilitazione e disabilitazione di Always Encrypted per una connessione di database più avanti in questo articolo.See Enabling and disabling Always Encrypted for a database connection below.
  2. Eseguire una query SELECT .Run a SELECT query. I dati recuperati dalle colonne crittografate verranno restituiti come valori binari (crittografati).Any data retrieved from encrypted columns will be returned as binary (encrypted) values.

Esempio Example
Supponendo che SSN è una colonna crittografata nella tabella Patients , la query riportata di seguito recupererà i valori binari del testo crittografato, se Always Encrypted è disabilitato per la connessione di database.Assuming SSN is an encrypted column in the Patients table, the query shown below will retrieve binary ciphertext values, if Always Encrypted is disabled for the database connection.

always-encrypted-ciphertext

Recupero dei valori del testo non crittografato archiviati nelle colonne crittografateRetrieving plaintext values stored in encrypted columns

Per recuperare i valori da una colonna crittografata come testo non crittografato (decrittografando i valori):To retrieve values from an encrypted column as plaintext (to decrypt the values):

  1. Assicurarsi che Always Encrypted sia abilitato per la connessione di database per la finestra dell'editor di query da cui si esegue la query SELECT .Make sure Always Encrypted is enabled for the database connection for the Query Editor window, from which you are running your SELECT query. Ciò indicherà al provider di dati .NET Framework per SQL Server (usato da SSMS) di decrittografare i dati recuperati dalle colonne crittografate.This will instruct the .NET Framework Data Provider for SQL Server (used by SSMS) to decrypt data retrieved from encrypted columns. Vedere la sezione Abilitazione e disabilitazione di Always Encrypted per una connessione di database più avanti in questo articolo.See Enabling and disabling Always Encrypted for a database below.
  2. Assicurarsi che sia possibile accedere a tutte le chiavi master della colonna configurate per le colonne crittografate.Make sure you can access all column master keys configured for encrypted columns. Ad esempio, se la chiave master della colonna è un certificato, è necessario assicurarsi che il certificato venga distribuito nel computer in cui è in esecuzione SSMS.For example, if your column master key is a certificate, you need to make sure the certificate is deployed on the machine, SSMS is running on. Oppure, se la chiave master della colonna è una chiave archiviata nell'insieme di credenziali delle chiavi di Azure, è necessario assicurarsi di avere le autorizzazioni per accedere alla chiave. Potrebbe inoltre essere richiesto di accedere ad Azure.Or, if your column master key is a key stored in Azure Key Vault, you need to make sure you have permissions to access the key (Also, you might be prompted to sign in to Azure.)
  3. Eseguire una query SELECT .Run a SELECT query. Tutti i dati recuperati dalle colonne crittografate verranno restituiti come testo non crittografato come valori dei tipi di dati originali.Any data retrieved from encrypted columns will be returned as plaintext as values of the original data types.

Esempio Example
Supponendo che SSN sia una colonna crittografata char(11) nella tabella Patients , la query mostrata di seguito restituirà i valori del testo non crittografato se Always Encrypted è abilitato per la connessione di database e se si ha accesso alla chiave master della colonna configurata per la colonna SSN .Assuming SSN is an encrypted char(11) column in the Patients table, the query, shown below, will return plaintext values, if Always Encrypted is enabled for the database connection and if you have access to the column master key configured for the SSN column.

always-encrypted-plaintext

Invio di valori del testo non crittografato destinati alle colonne crittografateSending plaintext values targeting encrypted columns

Per eseguire una query che invia un valore destinato a una colonna crittografata, ad esempio una query che inserisce, aggiorna o applica un filtro in base a un valore archiviato in una colonna crittografata:To execute a query that sends a value that targets an encrypted column, for example a query that inserts, updates or filters by a value stored in an encrypted column:

  1. Assicurarsi che Always Encrypted sia abilitato per la connessione di database per la finestra dell'editor di query da cui si esegue la query SELECT .Make sure Always Encrypted is enabled for the database connection for the Query Editor window, from which you are running your SELECT query. Ciò indica al provider di dati .NET Framework per SQL Server (usato da SSMS) di crittografare le variabili Transact-SQL con parametri (vedere più avanti) destinate alle colonne crittografate.This will instruct the .NET Framework Data Provider for SQL Server (used by SSMS) to encrypt parameterized Transact-SQL variables (see below) targeting encrypted columns. Vedere la sezione Abilitazione e disabilitazione di Always Encrypted per una connessione di database più avanti in questo articolo.See Enabling and disabling Always Encrypted for a database below.
  2. Assicurarsi che sia possibile accedere a tutte le chiavi master della colonna configurate per le colonne crittografate.Make sure you can access all column master keys configured for encrypted columns. Ad esempio, se la chiave master della colonna è un certificato, è necessario assicurarsi che il certificato venga distribuito nel computer in cui è in esecuzione SSMS.For example, if your column master key is a certificate, you need to make sure the certificate is deployed on the machine, SSMS is running on. Oppure, se la chiave master della colonna è una chiave archiviata nell'insieme di credenziali delle chiavi di Azure, è necessario assicurarsi di avere le autorizzazioni per accedere alla chiave. Potrebbe inoltre essere richiesto di accedere ad Azure.Or, if your column master key is a key stored in Azure Key Vault, you need to make sure you have permissions to access the key (Also, you might be prompted to sign in to Azure.)
  3. Assicurarsi che la funzionalità Parametrizzazione per Always Encrypted sia abilitata per la finestra dell'editor di query.Ensure Parameterization for Always Encrypted is enabled for the Query Editor window. Richiede almeno SSMS versione 17.0. Dichiarare una variabile Transact-SQL e inizializzarla con un valore da inviare al database (mediante le operazioni di inserimento, aggiornamento o applicazione del filtro).(Requires at least SSMS version 17.0.) Declare a Transact-SQL variable and initialize it with a value, you want to send (insert, update or filter by) to the database. Per informazioni dettagliate, vedere la sezione Parametrizzazione per Always Encrypted più avanti in questo articolo.See Parameterization for Always Encrypted below for details.
    > [!NOTE] > Poiché Always Encrypted supporta un subset limitato di conversioni di tipi, in molti casi è necessario che il tipo di dati di una variabile Transact-SQL sia lo stesso tipo della colonna di database di destinazione a cui è destinato.As Always Encrypted support a limited subset of type conversions, in many cases it is required that data type of a Transact-SQL variable is the same as the type of the target database column, it targets.
  4. Eseguire la query inviando il valore della variabile Transact-SQL al database.Run your query sending the value of the Transact-SQL variable to the database. SSMS convertirà la variabile in un parametro di query e crittograferà il relativo valore prima di inviarlo al database.SSMS will convert the variable to a query parameter and it will encrypt its value before sending it to the database.

Esempio Example
Supponendo che SSN sia una colonna crittografata char(11) nella tabella Patients , lo script seguente proverà a trovare una riga contenente '795-73-9838' nella colonna SSN e a restituire il valore della colonna LastName , a condizione che Always Encrypted sia abilitato per la connessione di database, che la funzionalità Parametrizzazione per Always Encrypted sia abilitata per la finestra dell'editor di query e che si abbia accesso alla chiave master della colonna configurata per la colonna SSN .Assuming SSN is an encrypted char(11) column in the Patients table, the below script will attempt to find a row containing '795-73-9838' in the SSN column and return the value of the LastName column, providing Always Encrypted is enabled for the database connection, Parameterization for Always Encrypted is enabled for the Query Editor window, and you have access to the column master key configured for the SSN column.

always-encrypted-patients

Enabling and disabling Always Encrypted for a database connection Enabling and disabling Always Encrypted for a database connection

Quando si abilita Always Encrypted per una connessione di database, si indica al provider di dati .NET Framework per SQL Server, usato da SQL Server Management Studio, di provare a eseguire le operazioni seguenti in modo trasparente:Enabling Always Encrypted for a database connection instructs the .NET Framework Data Provider for SQL Server, used by SQL Server Management Studio, to attempt to transparently:

  • Decrittografare tutti i valori recuperati dalle colonne crittografate e restituiti nei risultati della query.Decrypt any values that are retrieved from encrypted columns and returned in query results.
  • Crittografare i valori delle variabili Transact-SQL con parametri destinati alle colonne di database crittografate.Encrypt the values of the parameterized Transact-SQL variables that target encrypted database columns.
    Per abilitare Always Encrypted per una connessione di database, specificare Column Encryption Setting=Enabled nella scheda Proprietà aggiuntive della finestra di dialogo Connetti al server .To enable Always Encrypted for a database connection, specify Column Encryption Setting=Enabled in the Additional Properties tab of the Connect to Server dialog.
    Per disabilitare Always Encrypted per una connessione di database, specificare Column Encryption Setting=Disabled o semplicemente rimuovere l'impostazione di Crittografia di colonna dalla scheda Proprietà aggiuntive della finestra di dialogo Connetti al server (il valore predefinito è Disabilitato).To disable Always Encrypted for a database connection, specify Column Encryption Setting=Disabled or simply remove the setting of Column Encryption Setting from the Additional Properties tab of the Connect to Server dialog (its default value is Disabled).
Suggerimento

Per abilitare e disabilitare Always Encrypted per una finestra dell'editor di query esistente:To toggle between Always Encrypted being enabled and disabled for an existing Query Editor window:

  1. Fare clic con il pulsante destro del mouse in un punto qualsiasi all'interno della finestra dell'editor di query.Right-click anywhere in the Query Editor window.
  2. Selezionare Connessione > Cambia connessione...Select Connection > Change Connection …,
  3. Fare clic su Opzioni >>Click Options >>,
  4. Selezionare la scheda Proprietà aggiuntive e digitare Column Encryption Setting=Enabled (per abilitare il comportamento di Always Encrypted) o rimuovere l'impostazione (per disabilitare il comportamento di Always Encrypted).Select the Additional Properties tab and type Column Encryption Setting=Enabled (to enable the Always Encrypted behavior) or remove the setting (to disable the Always Encrypted behavior).
  5. Fare clic su Connetti.Click Connect.

Parameterization for Always EncryptedParameterization for Always Encrypted

Parametrizzazione per Always Encrypted è una funzionalità di SQL Server Management Studio che converte automaticamente le variabili Transact-SQL in parametri di query (istanze della classe SqlParameter).Parameterization for Always Encrypted is a feature in SQL Server Management Studio that automatically converts Transact-SQL variables into query parameters (instances of SqlParameter Class). Richiede almeno SSMS versione 17.0. Ciò consente al provider di dati .NET Framework per SQL Server di rilevare i dati destinati alle colonne crittografate e di crittografare tali dati prima di inviarli al database.(Requires at least SSMS version 17.0.) This allows the underlying .NET Framework Data Provider for SQL Server to detect data targeting encrypted columns, and to encrypt such data before sending it to the database.

Senza parametrizzazione, il provider di dati .NET Framework passa ogni istruzione creata nell'editor di query come query senza parametri.Without parameterization, the .NET Framework Data Provider passes each statement, you author in the Query Editor, as a non-parameterized query. Se la query contiene valori letterali o variabili Transact-SQL destinate a colonne crittografate, il provider di dati .NET Framework per SQL Server non riuscirà a rilevarle e crittografarle prima di inviare la query al database.If the query contains literals or Transact-SQL variables that target encrypted columns, the .NET Framework Data Provider for SQL Server will not be able to detect and encrypt them, before sending the query to the database. Di conseguenza, la query avrà esito negativo a causa di mancata corrispondenza tra i tipi, ovvero tra la variabile Transact-SQL letterale non crittografata e la colonna crittografata.As a result, the query will fail due to type mismatch (between the plaintext literal Transact-SQL variable and the encrypted column). Ad esempio, la query seguente avrà esito negativo senza parametrizzazione, supponendo che la colonna SSN sia crittografata.For example, the following query will fail without parameterization, assuming the SSN column is encrypted.

DECLARE @SSN NCHAR(11) = '795-73-9838'
SELECT * FROM [dbo].[Patients]
WHERE [SSN] = @SSN

Abilitazione/disabilitazione della funzionalità Parametrizzazione per Always EncryptedEnabling/Disabling Parameterization for Always Encrypted

La funzionalità Parametrizzazione per Always Encrypted è disabilitata per impostazione predefinita.Parameterization for Always Encrypted is disabled by default.

Per abilitare o disabilitare la funzionalità Parametrizzazione per Always Encrypted per la finestra dell'editor di query corrente:To enable/disable Parameterization for Always Encrypted for the current Query Editor window:

  1. Selezionare Query dal menu principale.Select Query from the main menu.
  2. Selezionare Opzioni query...Select Query Options….
  3. Passare a Esecuzione > Avanzata.Navigate to Execution > Advanced.
  4. Selezionare o deselezionare Abilita parametrizzazione per Always Encrypted.Select or unselect Enable Parameterization for Always Encrypted.
  5. Scegliere OK.Click OK.

Per abilitare/disabilitare la funzionalità Parametrizzazione per Always Encrypted per future finestre dell'editor di query:To enable/disable Parameterization for Always Encrypted for future Query Editor windows:

  1. Selezionare Strumenti dal menu principale.Select Tools from the main menu.
  2. Selezionare Opzioni...Select Options….
  3. Passare a Esecuzione query > SQL Server > Avanzata.Navigate to Query Execution > SQL Server > Advanced.
  4. Selezionare o deselezionare Abilita parametrizzazione per Always Encrypted.Select or unselect Enable Parameterization for Always Encrypted.
  5. Scegliere OK.Click OK.

Se si esegue una query in una finestra dell'editor di query che usa una connessione di database con l'opzione Always Encrypted abilitata, ma la parametrizzazione non è abilitata per la finestra dell'editor di query, verrà richiesto di abilitarla.If you execute a query in a Query Editor window that uses a database connection with Always Encrypted enabled, but parameterization is not enabled for the Query Editor window, you will be prompted to enable it.

Nota

La funzionalità Parametrizzazione per Always Encrypted funziona solo nelle finestre dell'editor di query che usano connessioni di database con l'opzione Always Encrypted abilitata (vedere Abilitazione e disabilitazione di Always Encrypted per una connessione di database).Parameterization for Always Encrypted works only in Query Editor windows that use database connections with Always Encrypted enabled (see Enabling and disabling Always Encrypted for a database). Non verrà parametrizzata alcuna variabile Transact-SQL se la finestra dell'editor di query usa una connessione di database senza l'opzione Always Encrypted abilitata.No Transact-SQL variables will be parameterized if the Query Editor window uses a database connection without Always Encrypted enabled.

Funzionamento di Parametrizzazione per Always EncryptedHow Parameterization for Always Encrypted works

Se nella connessione di database sono abilitati sia la funzionalità Parametrizzazione per Always Encrypted che il comportamento di Always Encrypted per una finestra dell'editor di query, SQL Server Management Studio proverà a parametrizzare le variabili Transact-SQL che soddisfano le condizioni necessarie seguenti:If both Parameterization for Always Encrypted and the Always Encrypted behavior in the database connection are enabled for a Query Editor window, SQL Server Management Studio will attempt parameterize Transact-SQL variables that meet the following pre-requisite conditions:

  • Le variabili devono essere dichiarate e inizializzate nella stessa istruzione (inizializzazione inline).Are declared and initialized in the same statement (inline initialization). Variabili dichiarate con istruzioni SET separate non verranno parametrizzate.Variables declared using separate SET statements will not be parameterized.
  • Le variabili devono essere inizializzate con un singolo valore letterale.Are initialized using a single literal. Variabili inizializzate con espressioni compresi operatori o funzioni non verranno parametrizzate.Variables initialized using expressions including any operators or functions will not be parameterized.

Di seguito sono riportati alcuni esempi di variabili che verranno parametrizzate da SQL Server Management Studio.Below are examples of variable, SQL Server Management Studio will parameterize.

DECLARE @SSN char(11) = '795-73-9838';

DECLARE @BirthDate date = '19990104';
DECLARE @Salary money = $30000;

Di seguito sono riportati invece alcuni esempi di variabili che non verranno parametrizzate da SQL Server Management Studio:And, here are a few examples of variables SQL Server Management Studio will not attempt to parameterize:

DECLARE @Name nvarchar(50); --Initialization seperate from declaration
SET @Name = 'Abel';

DECLARE @StartDate date = GETDATE(); -- a function used instead of a literal

DECLARE @NewSalary money = @Salary * 1.1; -- an expression used instead of a literal

Per far sì che la parametrizzazione riesca:For an attempted parameterization to succeed:

  • Il tipo del valore letterale usato per l'inizializzazione della variabile da parametrizzare deve corrispondere al tipo nella dichiarazione di variabile.The type of the literal used for the initialization of the variable to be parametrized, must match the type in the variable declaration.
  • Se il tipo dichiarato della variabile è un tipo data o ora, la variabile deve essere inizializzata usando una stringa con uno dei formati conformi a ISO 8601 seguenti.If the declared type of the variable is a date type or a time type, the variable must be initialized using a string using one of the following ISO 8601-compliant formats.

Di seguito sono riportati alcuni esempi di dichiarazioni di variabili Transact-SQL che causano errori di parametrizzazione:Here are the examples of Transact-SQL variable declarations that will result in parameterization errors:

DECLARE @BirthDate date = '01/04/1999' -- unsupported date format   

DECLARE @Number int = 1.1 -- the type of the literal does not match the type of the variable   

SQL Server Management Studio usa Intellisense per indicare le variabili che possono essere parametrizzate correttamente e quelle la cui parametrizzazione non riuscirà e il motivo.SQL Server Management Studio uses Intellisense to inform you which variables can be successfully parameterized and which parameterization attempts fail (and why).

Una dichiarazione di una variabile che può essere parametrizzata correttamente è contrassegnata con una sottolineatura di avviso nell'editor di query.A declaration of a variable that can be successfully parameterized is marked with a warning underline in the Query Editor. Se si passa il mouse su un'istruzione di dichiarazione contrassegnata con una sottolineatura di avviso, verranno visualizzati i risultati del processo di parametrizzazione, inclusi i valori delle proprietà chiave dell'oggetto SqlParameter risultante (la variabile a cui viene eseguito il mapping): SqlDbType, Size, Precision, Scale, SqlValue.If you hover on a declaration statement that got marked with a warning underline, you will see the results of the parameterization process, including the values of the key properties of the resulting SqlParameter object (the variable is mapped to): SqlDbType, Size, Precision, Scale, SqlValue. È anche possibile visualizzare l'elenco completo di tutte le variabili che sono state parametrizzate correttamente nella scheda Avviso della vista Elenco errori .You can also see the complete list of all variables that have been successfully parameterized in the Warning tab of the Error List view. Per aprire la vista Elenco errori , selezionare Vista dal menu principale, quindi selezionare Elenco errori.To open the Error List view, select View from the main menu and then select Error List.

Se SQL Server Management Studio ha provato a parametrizzare una variabile, ma la parametrizzazione non è riuscita, la dichiarazione della variabile verrà contrassegnata con una sottolineatura di errore.If SQL Server Management Studio has attempted to parameterize a variable, but the parameterization has failed, the declaration of the variable will be marked with an error underline. Se si passa il mouse sull'istruzione di dichiarazione contrassegnata con una sottolineatura di errore, verranno visualizzati i risultati relativi all'errore.If you hover on the declaration statement that has been marked with an error underline, you will get the results about the error. È anche possibile visualizzare l'elenco completo degli errori di parametrizzazione per tutte le variabili nella scheda Errore della vista Elenco errori .You can also see the complete list of parameterization errors for all variables in the Error tab of the Error List view. Per aprire la vista Elenco errori , selezionare Vista dal menu principale, quindi selezionare Elenco errori.To open the Error List view, select View from the main menu and then select Error List.

La schermata seguente mostra un esempio di sei dichiarazioni di variabili.The below screenshot shows an example of six variable declarations. SQL Server Management Studio ha parametrizzato correttamente le prime tre variabili.SQL Server Management Studio successfully parameterized the first three variables. Le ultime tre variabili non hanno soddisfatto le condizioni necessarie per la parametrizzazione e pertanto SQL Server Management Studio non ha provato a parametrizzarle (le relative dichiarazioni non vengono contrassegnate in alcun modo).The last three variables did not meet the pre-requisite conditions for parameterization, and therefore, SQL Server Management Studio did not attempt to parameterize them (their declarations are not marked in any way).

always-encrypted-parameter-warnings

Un altro esempio riportato di seguito mostra due variabili che soddisfano le condizioni necessarie per la parametrizzazione, ma il tentativo di parametrizzazione non è riuscito perché le variabili sono state inizializzate in modo non corretto.Another example below, shows two variables that meet pre-requisite conditions for parameterization, but the parameterization attempt has failed because the variables are incorrectly initialized.

always-encrypted-error

Nota

Poiché Always Encrypted supporta un subset limitato di conversioni di tipi, in molti casi è necessario che il tipo di dati di una variabile Transact-SQL sia lo stesso tipo della colonna di database di destinazione a cui è destinato.As Always Encrypted supports a limited subset of type conversions, in many cases it is required that the data type of a Transact-SQL variable is the same as the type of the target database column, it targets. Ad esempio, supponendo che il tipo della colonna SSN nella tabella Patients è char(11), la query sottostante avrà esito negativo perché il tipo della variabile @SSN , ovvero nchar(11), non corrisponde al tipo della colonna.For example, assuming type of the SSN column in the Patients table is char(11), the below query will fail, as the type of the @SSN variable, which is nchar(11), does not match the type of the column.

DECLARE @SSN nchar(11) = '795-73-9838'
SELECT * FROM [dbo].[Patients]
WHERE [SSN] = @SSN;
Msg 402, Level 16, State 2, Line 5   
The data types char(11) encrypted with (encryption_type = 'DETERMINISTIC', 
encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', 
column_encryption_key_database_name = 'Clinic') collation_name = 'Latin1_General_BIN2' 
and nchar(11) encrypted with (encryption_type = 'DETERMINISTIC', 
encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', 
column_encryption_key_database_name = 'Clinic') are incompatible in the equal to operator.
Nota

Senza la parametrizzazione, l'intera query, incluse le conversioni dei tipi, viene elaborata all'interno di SQL Server o del database SQL di Azure.Without parameterization, the entire query, including type conversions, is processed inside SQL Server/Azure SQL Database. Con parametrizzazione abilitata, alcune conversioni dei tipi vengono eseguite da .NET Framework all'interno di SQL Server Management Studio.With parameterization enabled, some type conversions are performed by .NET Framework inside SQL Server Management Studio. A causa delle differenze tra il sistema dei tipi .NET Framework e il sistema dei tipi SQL Server (ad esempio diversa precisione di alcuni tipi come float), una query eseguita con la parametrizzazione abilitata può produrre risultati diversi rispetto alla query eseguita senza la parametrizzazione abilitata.Due to differences between the .NET Framework type system and the SQL Server type system (e.g. different precision of some types, such as float), a query executed with parameterization enabled can produce different results than the query executed without parameterization enabled.

PermissionsPermissions

Per eseguire le query su colonne crittografate, incluse le query che recuperano i dati in testo crittografato, sono necessarie le autorizzazioni VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION nel database.To run any queries against encrypted columns, including queries that retrieve data in ciphertext, you need the VIEW ANY COLUMN MASTER KEY DEFINITION and VIEW ANY COLUMN ENCRYPTION KEY DEFINITION permissions in the database.
Oltre a queste autorizzazioni, per decrittografare i risultati delle query o per crittografare i parametri di query (generati dalla parametrizzazione delle variabili Transact-SQL), è necessario anche accedere alla chiave master della colonna proteggendo le colonne di destinazione:In addition to the above permissions, to decrypt any query results or to encrypt any query parameters (produced by parameterizing Transact-SQL variables), you also need access to the column master key protecting the target columns:

  • Archivio certificati - Computer locale : è necessario avere l'accesso Read al certificato usato come chiave master della colonna o essere l'amministratore del computer.Certificate Store – Local computer You must have Read access to the certificate that is used a column master key, or be the administrator on the computer.
  • Insieme di credenziali delle chiavi di Azure : sono necessarie le autorizzazioni get, unwrapKeye verify per l'insieme di credenziali contenente la chiave master della colonna.Azure Key Vault You need the get, unwrapKey, and verify permissions on the vault containing the column master key.
  • Provider dell'archivio chiavi (CNG) : l'autorizzazione e le credenziali necessarie quando si usa un archivio chiavi o una chiave, in base all'archivio e alla configurazione KSP.Key Store Provider (CNG) The required permission and credentials, you might be prompted for when using a key store or a key, depend on the store and the KSP configuration.
  • Provider del servizio di crittografia (CAPI) : l'autorizzazione e le credenziali necessarie quando si usa un archivio chiavi o una chiave, in base all'archivio e alla configurazione CSP.Cryptographic Service Provider (CAPI) The required permission and credentials, you might be prompted for when using a key store or a key, depend on the store and the CSP configuration.

Per altre informazioni, vedere Creare e archiviare chiavi master della colonna (Always Encrypted).For more information, see Create and Store Column Master Keys (Always Encrypted).

Provisioning di chiavi master della colonna (Nuova chiave master della colonna)Provisioning Column Master Keys (New Column Master Key)

La finestra di dialogo Nuova chiave master della colonna consente di generare una chiave master della colonna o selezionare una chiave esistente in un archivio chiavi e di creare i metadati della chiave master della colonna per la chiave selezionata o creata nel database.The New Column Master Key dialog allows you to generate a column master key or pick an existing key in a key store, and create column master key metadata for the created or selected key in the database.

  1. In Esplora oggetti passare alla cartella Sicurezza > Chiavi con crittografia sempre attiva del database.Using Object Explorer, navigate to the Security>Always Encrypted Keys folder under your database.
  2. Fare clic con il pulsante destro del mouse sulla cartella Chiavi master della colonna e selezionare Nuova chiave master della colonna.Right click on the Column Master Keys folder and select New Column Master Key….
  3. Nella finestra di dialogo Nuova chiave master della colonna immettere il nome dell'oggetto metadati della chiave master della colonna.In the New Column Master Key dialog, enter the name of the column master key metadata object.
  4. Selezionare un archivio chiavi:Select a key store:

    • Archivio certificati - Utente corrente : indica il percorso dell'archivio certificati Utente corrente nell'archivio certificati di Windows, ovvero nell'archivio personale.Certificate Store – Current User – indicates the Current User certificate store location in the Windows Certificate Store, which is your personal store.
    • Archivio certificati - Computer locale : indica il percorso dell'archivio certificati Computer locale nell'archivio certificati di Windows.Certificate Store – Local computer – indicates the Local computer certificate store location in the Windows Certificate Store.
    • Insieme di credenziali delle chiavi di Azure : è necessario accedere ad Azure facendo clic su Accedi.Azure Key Vault – you will need to sign in to Azure (click Sign in). Eseguito l'accesso, sarà possibile selezionare uno degli abbonamenti di Azure e un insieme di credenziali delle chiavi.Once you sign in, you will be able to pick one of your Azure subscriptions and a key vault.
    • Provider dell'archivio chiavi (CNG) : indica un archivio chiavi che è accessibile tramite un provider dell'archivio chiavi (KSP) che implementa l'API CNG (Cryptography Next Generation).Key Store Provider (CNG) – indicates a key store that is accessible via a key store provider (KSP) that implements the Cryptography Next Generation (CNG) API. In genere, questo tipo di archivio è un modulo di protezione hardware (HSM).Typically, this type of a store is a hardware security module (HSM). Dopo aver selezionato questa opzione, è necessario selezionare un provider dell'archivio chiavi.After you select this option, you will need to pick a KSP. Viene selezionato per impostazione predefinita ilprovider dell'archivio chiavi del software Microsoft .Microsoft Software Key Store Provider is selected by default. Per usare una chiave master della colonna archiviata in un HSM, selezionare un provider dell'archivio chiavi per il dispositivo, che deve essere installato e configurato nel computer prima di aprire la finestra di dialogo.If you want to use a column master key stored in an HSM, select a KSP for your device (it must be installed and configured on the computer before you open the dialog).
    • Provider del servizio di crittografia : un archivio chiavi accessibile attraverso un provider del servizio di crittografia (CSP) che implementa l'API di crittografia (CAPI).Cryptographic Service Provider (CAPI) - a key store that is accessible via a cryptographic service provider (CSP) that implements the Cryptography API (CAPI). In genere, questo archivio è un modulo di protezione hardware (HSM).Typically, such a store is a hardware security module (HSM). Dopo aver selezionato questa opzione, è necessario selezionare un provider del servizio di crittografia.After you select this option, you will need to pick a CSP. Per usare una chiave master della colonna archiviata in un HSM, selezionare un provider del servizio di crittografia per il dispositivo, che deve essere installato e configurato nel computer prima di aprire la finestra di dialogo.If you want to use a column master key stored in an HSM, select a CSP for your device (it must be installed and configured on the computer before you open the dialog).
    Nota

    Poiché CAPI è un'API deprecata, il provider del servizio di crittografia è disabilitato per impostazione predefinita.Since CAPI is a deprecated API, the Cryptographic Service Provider (CAPI) option is disabled by default. È possibile abilitarlo creando il valore DWORD CAPI Provider Enabled sotto la chiave [HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\sql13\Tools\Client\Always Encrypted] nel Registro di sistema di Windows e impostando il valore su 1.You can enable by creating the CAPI Provider Enabled DWORD value under the [HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\sql13\Tools\Client\Always Encrypted] key in Windows Registry, and setting it to 1. È consigliabile usare CNG anziché CAPI, a meno che l'archivio chiavi non supporti CNG.You should use CNG instead of CAPI, unless your key store does not support CNG.

    Per altre informazioni sugli archivi chiavi indicati sopra, vedere Creare e archiviare chiavi master della colonna (Always Encrypted).For more information about the above key stores, see Create and Store Column Master Keys (Always Encrypted).

  5. Selezionare una chiave esistente nell'archivio chiavi oppure fare clic sul pulsante Genera chiave o Genera certificato per creare una chiave nell'archivio chiavi.Pick an existing key in your key store, or click the Generate Key or Generate Certificate button, to create a key in the key store.

  6. Fare clic su OK e la nuova chiave verrà visualizzata nell'elenco.Click OK and the new key will show up in the list.

SQL Server Management Studio crea i metadati per la chiave master della colonna nel database.SQL Server Management Studio will create metadata for your column master key in the database. Nella finestra di dialogo viene generata e rilasciata un'istruzione CREATE COLUMN MASTER KEY (Transact-SQL) .The dialog achieves this by generating and issuing a CREATE COLUMN MASTER KEY (Transact-SQL) statement.

Provisioning delle chiavi di crittografia della colonna (Nuova chiave di crittografia della colonna)Provisioning Column Encryption Keys (New Column Encryption Key)

La finestra di dialogo Nuova chiave di crittografia della colonna consente di generare una chiave di crittografia della colonna, crittografarla con una chiave master della colonna e creare i metadati della chiave di crittografia della colonna nel database.The New Column Encryption Key dialog allows you to generate a column encryption key, encrypt it with a column master key, and create the column encryption key metadata in the database.

  1. In Esplora oggettipassare alla cartella Sicurezza/Chiavi con crittografia sempre attiva del database.Using Object Explorer, navigate to the Security/Always Encrypted Keys folder under your database.
  2. Fare clic con il pulsante destro del mouse sulla cartella Chiavi di crittografia della colonna e selezionare Nuova chiave di crittografia della colonna.Right click on the Column Encryption Keys folder and select New Column Encryption Key….
  3. Nella finestra di dialogo Nuova chiave di crittografia della colonna immettere il nome dell'oggetto metadati della chiave di crittografia della colonna.In the New Column Encryption Key dialog, enter the name of the column encryption key metadata object.
  4. Selezionare un oggetto metadati che rappresenta la chiave master della colonna nel database.Select a metadata object that represents your column master key in the database.
  5. Scegliere OK.Click OK.

SQL Server Management Studio genera una nuova chiave di crittografia della colonna e consente di recuperare i metadati per la chiave master della colonna selezionata dal database.SQL Server Management Studio will generate a new column encryption key and then it will retrieve the metadata for the column master key you selected from the database. SQL Server Management Studio userà quindi i metadati della chiave master della colonna per contattare l'archivio chiavi contenente la chiave master della colonna e crittografare la chiave di crittografia della colonna.SQL Server Management Studio will then use the column master key metadata to contact the key store containing your column master key and encrypt the column encryption key. Infine, vengono creati nel database i metadati per la nuova chiave di crittografia della colonna.Finally, the metadata for the new column encryption key will be created in the database. Nella finestra di dialogo viene generata e rilasciata un'istruzione CREATE COLUMN ENCRYPTION KEY (Transact-SQL) .The dialog achieves this by generating and issuing a CREATE COLUMN ENCRYPTION KEY (Transact-SQL) statement.

PermissionsPermissions

Sono necessarie le autorizzazioni ALTER ANY ENCRYPTION MASTER KEY e VIEW ANY COLUMN MASTER KEY DEFINITION del database per creare nella finestra di dialogo i metadati della chiave di crittografia della colonna e accedere ai metadati della chiave master della colonna.You need the ALTER ANY ENCRYPTION MASTER KEY and VIEW ANY COLUMN MASTER KEY DEFINITION database permissions in the database for the dialog to create the column encryption key metadata and to access column master key metadata. Per accedere a un archivio chiavi e usare la chiave master della colonna, è possibile richiedere le autorizzazioni per l'archivio chiavi e/o la chiave:To access a key store and use the column master key, you might require permissions on the key store or/and the key:

  • Archivio certificati - Computer locale : è necessario avere accesso in lettura al certificato usato come chiave master della colonna o essere l'amministratore del computer.Certificate Store – Local computer - you must have Read access to the certificate that is used as a column master key, or be the administrator on the computer.
  • Insieme di credenziali delle chiavi di Azure : sono necessarie le autorizzazioni get, unwrapKey, wrapKey, signe verify per l'insieme di credenziali contenente la chiave master della colonna.Azure Key Vault – you need the get, unwrapKey, wrapKey, sign, and verify permissions on the vault containing the column master key.
  • Provider dell'archivio chiavi (CNG) : l'autorizzazione e le credenziali obbligatorie potrebbero essere richieste quando si usa un archivio chiavi o una chiave, in base all'archivio e alla configurazione KSP.Key Store Provider (CNG) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the KSP configuration.
  • Provider del servizio di crittografia (CAPI) : potrebbero essere richieste l'autorizzazione e le credenziali obbligatorie quando si usa un archivio chiavi o una chiave, in base all'archivio e alla configurazione CSP.Cryptographic Service Provider (CAPI) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the CSP configuration.

Per altre informazioni, vedere Creare e archiviare chiavi master della colonna (Always Encrypted).For more information, see Create and Store Column Master Keys (Always Encrypted).

Rotazione delle chiavi master di colonnaRotating Column Master Keys

La rotazione di una chiave master della colonna è il processo di sostituzione di una chiave master della colonna esistente con la nuova chiave.The rotation of a column master key is the process of replacing an existing column master key with a new column master key. Potrebbe essere necessario ruotare una chiave se questa è stata compromessa oppure per conformità ai criteri e alle normative dell'organizzazione che impongono la rotazione a intervalli regolari delle chiavi crittografiche .You may need to rotate a key if it has been compromised, or in order to comply with your organization’s policies or compliance regulations that mandate cryptographic keys must be rotated on a regular basis. La rotazione delle chiavi master della colonna interessa la decrittografia delle chiavi di crittografia della colonna che sono protette dalla chiave master corrente della colonna, la loro successiva crittografia tramite la chiave master nuova della colonna e l'aggiornamento dei metadati per entrambi i tipi di chiavi.A column master key rotation involves decrypting column encryption keys that are protected with the current column master key, re-encrypting them using the new column master key, and updating the key metadata. Per altre informazioni, vedere Panoramica della gestione delle chiavi per Always Encrypted.For more information, see Overview of Key Management for Always Encrypted.

Passaggio 1: Eseguire il provisioning di una nuova chiave master della colonnaStep 1: Provision a new column master key

Effettuare il provisioning di una nuova chiave master della colonna seguendo la procedura descritta nella sezione Provisioning delle chiavi master della colonna.Provision a new column master key, by following the steps in the Provisioning Column Master Keys section above.

Passaggio 2: Eseguire la crittografia delle chiavi di crittografia con la nuova chiave master della colonnaStep 2: Encrypt column encryption keys with the new column master key

Una chiave master della colonna protegge in genere uno o più chiavi di crittografia di colonna.A column master key typically protects one or more column encryption keys. Una chiave master della colonna protegge in genere una o più chiavi di crittografia della colonna. Ognuna di queste chiavi contiene un valore crittografato e archiviato nel database, che è il risultato della crittografia della chiave di crittografia con la chiave master della colonna.Each column encryption key has an encrypted value stored in the database, that is the product of encrypting the column encryption key with the column master key. In questo passaggio è necessario crittografare tutte le chiavi di crittografia della colonna protette con la chiave master della colonna, eseguendo la rotazione con la nuova chiave master della colonna e archiviando il nuovo valore crittografato nel database.In this step, encrypt each of the column encryption keys that are protected with the column master key you are rotating, with the new column master key, and store the new encrypted value in the database. Di conseguenza, ogni chiave di crittografia della colonna interessata dalla rotazione avrà due valori crittografati: un valore crittografato con la chiave master della colonna esistente e un nuovo valore crittografato con la nuova chiave master della colonna.As a result, each column encryption key that is affected by the rotation will have two encrypted values: one value encrypted with the existing column master key, and a new value encrypted with the new column master key.

  1. In Esplora oggetti passare alla cartella Sicurezza>Chiavi con crittografia sempre attiva>Chiavi master della colonna e individuare la chiave master della colonna per la rotazione.Using Object Explorer, navigate to the Security>Always Encrypted Keys>Column Master Keys folder and locate the column master key you are rotating.
  2. Fare clic con il pulsante destro del mouse sulla chiave master della colonna e selezionare Ruota.Right-click on the column master key and select Rotate.
  3. Nella finestra Rotazione della chiave master della colonna selezionare il nome della nuova chiave master della colonna creata nel passaggio 1 nel campo Destinazione .In the Column Master Key Rotation dialog, select the name of your new column master key, you created in Step 1, in the Target field.
  4. Consultare l'elenco delle chiavi di crittografia della colonna protette dalle chiavi master della colonna esistenti.Review the list of column encryption keys, protected by the existing column master keys. Queste chiavi saranno coinvolte nella rotazione.These keys will be affected by the rotation.
  5. Scegliere OK.Click OK.

SQL Server Management Studio ottiene i metadati delle chiavi di crittografia della colonna protette con la chiave master della colonna precedente e i metadati delle chiavi master della colonna vecchie e nuove.SQL Server Management Studio will obtain the metadata of the column encryption keys that are protected with the old column master key, and the metadata of the old and the new column master keys. Quindi, SSMS usa i metadati della chiave master della colonna per accedere all'archivio dati contenente la chiave master della colonna precedente e decrittografare le chiavi di crittografia della colonna.Then, SSMS will use the column master key metadata to access the key store containing the old column master key and decrypt the column encryption key(s). Successivamente, SSMS accede all'archivio chiavi contenente la nuova chiave master della colonna per produrre un nuovo set di valori crittografati delle chiavi di crittografia della colonna e quindi aggiunge i nuovi valori ai metadati generando ed emettendo istruzioni ALTER COLUMN ENCRYPTION KEY (Transact-SQL) .Subsequently, SSMS will access the key store holding the new column master key to produce a new set of encrypted values of the column encryption keys, and then it will add the new values to the metadata (generating and issuing ALTER COLUMN ENCRYPTION KEY (Transact-SQL) statements).

Nota

Verificare che ogni chiave di crittografia della colonna, crittografata con la chiave master della colonna precedente, non sia crittografata con altre chiavi master della colonna.Make sure each of the column encryption keys, encrypted with the old column master key, is not encrypted with any other column master key. In altre parole, ogni chiave di crittografia della colonna interessata dalla rotazione deve avere un solo valore crittografato nel database.In other words, each column encryption key, impacted by the rotation, must have exactly one encrypted value in the database. Se una chiave di crittografia della colonna interessata contiene più di un valore crittografato, è necessario rimuovere il valore prima di procedere con la rotazione (vedere il passaggio 4 per la rimozione di un valore crittografato da una chiave di crittografia della colonna).If any affected column encryption key has more than one encrypted value, you need to remove the value before you can proceed with the rotation (see Step 4 on how to remove an encrypted value of a column encryption key).

Passaggio 3: Configurazione delle applicazioni con la nuova chiave master della colonnaStep 3: Configure your applications with the new column master key

In questo passaggio è necessario verificare che tutte le applicazioni client in uso che eseguono query nelle colonne del database protette dalla chiave master della colonna in fase di rotazione siano in grado di accedere alla nuova chiave master della colonna, ad esempio le colonne del database crittografate con una chiave di crittografia della colonna crittografata con la chiave master della colonna.In this step you need to make sure that all your client applications that query database columns protected with the column master key that you are rotating can access the new column master key (i.e. database columns encrypted with a column encryption key that is encrypted with the column master key, being rotated). Questo passaggio dipende dal tipo di archivio chiavi in cui si trova la nuova chiave master della colonna.This step depends on the type of key store your new column master key is in. Esempio:For example:

  • Se la nuova chiave master della colonna è un certificato archiviato nell'archivio certificati di Windows, è necessario distribuire il certificato nella posizione dell'archivio dei certificati (Utente corrente o Computer locale) e nella posizione specificata nel percorso della chiave master della colonna nel database.If the new column master key is a certificate stored in Windows Certificate Store, you need to deploy the certificate to the same certificate store location (Current User or Local computer) as the location specified in the key path of your column master key in the database. L'applicazione deve poter accedere al certificato:The application needs to be able to access the certificate:
    • Se il certificato viene archiviato nel percorso dell'archivio certificati Utente corrente , deve essere importato nell'archivio Utente corrente dell'identità Windows dell'applicazione (utente).If the certificate is stored in the Current User certificate store location, the certificate needs to be imported into the Current User store of the application’s Windows identity (user).
    • Se il certificato viene archiviato nel percorso dell'archivio certificati Computer locale , l'identità Windows dell'applicazione deve disporre dell'autorizzazione per accedere al certificato.If the certificate is stored in the Local computer certificate store location, the application’s Windows identity must have permission to access the certificate.
  • Se la nuova chiave master della colonna viene archiviata nell'insieme di credenziali delle chiavi di Microsoft Azure, deve essere implementata per l'autenticazione in Azure e deve essere autorizzata ad accedere alla chiave.If the new column master key is stored in Microsoft Azure Key Vault, the application must be implemented so that it can authenticate to Azure and has permission to access the key.

Per i dettagli,vedere Creare e archiviare chiavi master della colonna (Always Encrypted).For details, see Create and Store Column Master Keys (Always Encrypted).

Nota

A questo punto della rotazione, sia la nuova chiave master della colonna che quella precedente sono valide e possono essere usate per accedere ai dati.At this point in the rotation, both the old column master key and the new column master key are valid and can be used to access the data.

Passaggio 4: Eseguire la pulizia dei valori della chiave di crittografia della colonna crittografati con la chiave master della colonna precedenteStep 4: Clean up column encryption key values encrypted with the old column master key

Dopo aver configurato tutte le applicazioni per l'uso con la nuova chiave master della colonna, rimuovere dal database i valori delle chiavi di crittografia della colonna, crittografate con la chiave master della colonna precedente .Once you have configured all your applications to use the new column master key, remove the values of column encryption keys that are encrypted with the old column master key from the database. La rimozione dei valori precedenti predispone il sistema per la rotazione successiva. Tenere presente che ogni chiave di crittografia della colonna, protetta con una chiave master della colonna da ruotare, deve avere esattamente un valore crittografato.Removing old values will ensure you are ready for the next rotation (remember, each column encryption key, protected with a column master key to be rotated, must have exactly one encrypted value).

Un altro motivo per cui è necessario pulire il valore precedente prima di archiviare o rimuovere la chiave master della colonna precedente riguarda le prestazioni: quando si eseguono query su una colonna crittografata, un driver client abilitato per la crittografia sempre attiva potrebbe tentare di decrittografare due valori, il valore precedente e quello nuovo.Another reason to clean up the old value before archiving or removing the old column master key, is performance-related: when querying an encrypted column, an Always Encrypted-enabled client driver might need to attempt to decrypt two values: the old value and the new one. Il driver non riconosce quale delle due chiavi master della colonna sia valida nell'ambiente dell'applicazione, quindi recupera entrambi i valori dal server.The driver does not know which of the two column master keys is valid in the application’s environment so the driver will retrieve both encrypted values from the server. Se la decrittografia di uno dei valori non va a buon fine in ragione del fatto che il valore è protetto con una chiave master della colonna non disponibile (ad esempio, la chiave master della colonna precedente rimossa dall'archivio), il driver tenterà di decrittografare un altro valore usando la nuova chiave master della colonna.If decrypting one of the values fails, because it is protected with the column master key is that not available (e.g. it is the old column master key that has been removed from the store), the driver will attempt to decrypt another value using the new column master key.

Avviso

Se si rimuove il valore di una chiave di crittografia della colonna prima che la relativa chiave master della colonna diventi disponibile per un'applicazione, l'applicazione non sarà più in grado di decrittografare la colonna del database.If you remove the value of a column encryption key before its corresponding column master key has been made available to an application, the application will no longer be able to decrypt the database column.

  1. In Esplora oggetti passare alla cartella Sicurezza>Chiavi con crittografia sempre attiva e individuare la chiave master della colonna esistente da sostituire.Using Object Explorer, navigate to the Security>Always Encrypted Keys folder and locate the existing column master key you want to replace.
  2. Fare clic con il pulsante destro del mouse sulla chiave master della colonna esistente e selezionare Pulizia.Right-click on your existing column master key and select Cleanup.
  3. Verificare l'elenco dei valori delle chiavi di crittografia della colonna da rimuovere.Review the list of column encryption key values to be removed.
  4. Scegliere OK.Click OK.

SQL Server Management Studio rilascerà istruzioni ALTER COLUMN ENCRYPTION KEY (Transact-SQL) per eliminare i valori crittografati delle chiavi di crittografia della colonna crittografati con la chiave master della colonna precedente.SQL Server Management Studio will issue ALTER COLUMN ENCRYPTION KEY (Transact-SQL) statements to drop encrypted values of column encryption keys that are encrypted with the old column master key.

Passaggio 5: Eliminare i metadati per la chiave master della colonna precedenteStep 5: Delete metadata for your old column master key

Se si sceglie di rimuovere la definizione della chiave master della colonna precedente dal database, eseguire la procedura descritta di seguito.If you choose to remove the definition of the old column master key from the database, use the below steps.

  1. In Esplora oggetti passare alla cartella Sicurezza>Chiavi con crittografia sempre attiva>Chiavi master della colonna e individuare la chiave master della colonna precedente da rimuovere dal database.Using Object Explorer, navigate to the Security>Always Encrypted Keys>Column Master Keys folder and locate the old column master key to be removed from the database.
  2. Fare clic con il pulsante destro del mouse sulla chiave master della colonna precedente e selezionare Elimina.Right-click on the old column master key and select Delete. In questo modo viene generata e rilasciata un'istruzione DROP COLUMN MASTER KEY (Transact-SQL) per rimuovere i metadati della colonna chiave master.(This will generate and issue a DROP COLUMN MASTER KEY (Transact-SQL) statement to remove the column master key metadata.)
  3. Scegliere OK.Click OK.
Nota

Si consiglia di non eliminare definitivamente la chiave master della colonna precedente dopo la rotazione.It is highly recommended you do not permanently delete the old column master key after the rotation. È opportuno invece mantenere la chiave master della colonna precedente nell'archivio chiavi in cui si trova o archiviarla in un altro posto sicuro.Instead, you should keep the old column master key in its current key store or archive it in another secure place. Se si ripristina il database da un file di backup creato prima della configurazione della nuova chiave master della colonna, sarà necessaria la chiave precedente per accedere ai dati.If you restore your database from a backup file to a point in time before the new column master key was configured, you will need the old key to access the data.

PermissionsPermissions

La rotazione di una chiave master della colonna richiede le seguenti autorizzazioni di database:Rotating a column master key requires the following database permissions:

  • ALTER ANY COLUMN MASTER KEY : richiesta per creare i metadati per la nuova chiave master della colonna ed eliminare i metadati per la chiave master della colonna precedente.ALTER ANY COLUMN MASTER KEY – required to create metadata for the new column master key and deleting the metadata for the old column master key.
  • ALTER ANY COLUMN ENCRYPTION KEY : richiesta per modificare i metadati della chiave di crittografia della colonna (aggiunta di nuovi valori crittografati).ALTER ANY COLUMN ENCRYPTION KEY – required to modify column encryption key metadata (add new encrypted values).
  • VIEW ANY COLUMN MASTER KEY DEFINITION : richiesta per accedere e leggere i metadati delle chiavi master della colonna.VIEW ANY COLUMN MASTER KEY DEFINITION - required to access and read the metadata of the column master keys.
  • VIEW ANY COLUMN ENCRYPTION KEY DEFINITION : richiesta per accedere e leggere i metadati delle chiavi di crittografia della colonna.VIEW ANY COLUMN ENCRYPTION KEY DEFINITION - required to access and read the metadata of the column encryption keys.

È necessario essere in grado di accedere sia alla chiave master della colonna precedente, sia alla nuova chiave master della colonna nei rispettivi archivi chiavi.You also need to be able to access both the old column master key and the new column master key in their key stores. Per accedere a un archivio chiavi e usare una chiave master della colonna, è possibile richiedere le autorizzazioni per l'archivio chiavi e/o la chiave:To access a key store and use a column master key, you might require permissions on the key store or/and the key:

  • Archivio certificati - Computer locale : è necessario avere accesso in lettura al certificato usato come chiave master della colonna o essere l'amministratore del computer.Certificate Store – Local computer - you must have Read access to the certificate that is used a column master key, or be the administrator on the computer.
  • Insieme di credenziali delle chiavi di Azure : sono necessarie le autorizzazioni create, get, unwrapKey, wrapKey, signe verify per l'insieme di credenziali contenente le chiavi master della colonna.Azure Key Vault – you need the create, get, unwrapKey, wrapKey, sign, and verify permissions on the vault containing the column master key(s).
  • Provider dell'archivio chiavi (CNG) : l'autorizzazione e le credenziali obbligatorie potrebbero essere richieste quando si usa un archivio chiavi o una chiave, in base all'archivio e alla configurazione KSP.Key Store Provider (CNG) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the KSP configuration.
  • Provider del servizio di crittografia (CAPI) : potrebbero essere richieste l'autorizzazione e le credenziali obbligatorie quando si usa un archivio chiavi o una chiave, in base all'archivio e alla configurazione CSP.Cryptographic Service Provider (CAPI) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the CSP configuration.

Per altre informazioni, vedere Creare e archiviare chiavi master della colonna (Always Encrypted).For more information, see Create and Store Column Master Keys (Always Encrypted).

Rotazione delle chiavi di crittografia della colonnaRotating Column Encryption Keys

La rotazione di una chiave di crittografia della colonna comporta la decrittografia dei dati in tutte le colonne crittografate con la chiave da ruotare e la nuova crittografia dei dati che usano la nuova chiave di crittografia della colonna.Rotating a column encryption key involves decrypting the data in all columns that are encrypted with the key to be rotated out, and re-encrypting the data using the new column encryption key.

Nota

La rotazione di una chiave di crittografia della colonna può richiedere molto tempo, se le tabelle contenenti le colonne crittografate con la chiave da ruotare sono di grandi dimensioni.Rotating a column encryption key can take a very long time if the tables containing columns encrypted with the key being rotated are large. Durante la nuova crittografia dei dati, le applicazioni non possono scrivere nelle tabelle interessate.While the data is being re-encrypted, your applications cannot write to the impacted tables. Pertanto, l'organizzazione deve pianificare con molta attenzione una rotazione della chiave di crittografia della colonna.Therefore, your organization needs to plan a column encryption key rotation very carefully. Per ruotare una chiave di crittografia della colonna, usare la procedura guidata di Always Encrypted.To rotate a column encryption key, use the Always Encrypted Wizard.

  1. Aprire la procedura guidata per il database: fare clic con il pulsante destro del mouse sul database, scegliere Attività, quindi fare clic su Crittografa colonne.Open the wizard for your database: right-click your database, point to Tasks, and then click Encrypt Columns.
  2. Leggere la pagina Introduzione , quindi fare clic su Avanti.Review the Introduction page, and then click Next.
  3. Nella pagina Selezione colonne espandere le tabelle e individuare tutte le colonne da sostituire che attualmente vengono crittografate con la chiave di crittografia della colonna precedente.On the Column Selection page, expand the tables and locate all columns you want to replace that are currently encrypted with the old column encryption key.
  4. Per ogni colonna crittografata con la chiave di crittografia precedente, impostare Chiave di crittografia su una nuova chiave generata automaticamente.For each column encrypted with the old column encryption key, set Encryption Key to a new auto-generated key. Nota: in alternativa, è possibile creare una nuova chiave di crittografia della colonna prima di eseguire la procedura guidata. Vedere la sezione Provisioning delle chiavi di crittografia della colonna .Note: Alternatively, you can create a new column encryption key before running the wizard – see the Provisioning Column Encryption Keys section above.
  5. Nella pagina Configurazione chiave master selezionare un percorso in cui archiviare la nuova chiave, selezionare un'origine della chiave master e quindi fare clic su Avanti.On the Master Key Configuration page, select a location to store the new key, and select a master key source, and then click Next. Nota: se si usa una chiave di crittografia della colonna già esistente (non una generata automaticamente), non deve essere eseguita alcuna azione in questa pagina.Note: If you are using an existing column encryption key (not an auto-generated one), there is no action to perform on this page.
  6. Nella pagina Convalidascegliere se eseguire lo script immediatamente o creare uno script di PowerShell, quindi fare clic su Avanti.On the Validation page, choose whether to run the script immediately or create a PowerShell script, and then click Next.
  7. Nella pagina Riepilogo esaminare le opzioni selezionate, quindi fare clic su Fine e chiudere la procedura guidata quando viene completata.On the Summary page, review the options you have selected, and then click Finish and close the wizard when completed.
  8. In Esplora oggettipassare alla cartella Sicurezza/Chiavi con crittografia sempre attiva/Chiavi di crittografia della colonna e individuare la chiave di crittografia della colonna precedente da rimuovere dal database.Using Object Explorer, navigate to the Security/Always Encrypted Keys/Column Encryption Keys folder and locate your old column encryption key, to be removed from the database. Fare clic sulla chiave con il pulsante destro del mouse e selezionare Elimina.Right-click on the key and select Delete.

PermissionsPermissions

La rotazione di una chiave di crittografia della colonna richiede le seguenti autorizzazioni di database: ALTER ANY COLUMN MASTER KEY : richiesta se si usa una nuova chiave di crittografia della colonna generata automaticamente (verranno generati anche una nuova chiave master della colonna e i relativi metadati).Rotating a column encryption key requires the following database permissions: ALTER ANY COLUMN MASTER KEY – required if you use a new auto-generated column encryption key (a new column master key and its new metadata will also be generated). ALTER ANY COLUMN ENCRYPTION KEY : richiesta per aggiungere metadati per la nuova chiave di crittografia della colonna.ALTER ANY COLUMN ENCRYPTION KEY –required to add metadata for the new column encryption key. VIEW ANY COLUMN MASTER KEY DEFINITION : richiesta per accedere e leggere i metadati delle chiavi master della colonna.VIEW ANY COLUMN MASTER KEY DEFINITION - required to access and read the metadata of the column master keys. VIEW ANY COLUMN ENCRYPTION KEY DEFINITION : richiesta per accedere e leggere i metadati delle chiavi di crittografia della colonna.VIEW ANY COLUMN ENCRYPTION KEY DEFINITION - required to access and read the metadata of the column encryption keys.

È necessario essere in grado di accedere alle chiavi master sia per la nuova chiave di crittografia della colonna, sia per la chiave di crittografia precedente.You also need to be able to access column master keys for both the new and the old column encryption key. Per accedere a un archivio chiavi e usare una chiave master della colonna, è possibile richiedere le autorizzazioni per l'archivio chiavi e/o la chiave:To access a key store and use a column master key, you might require permissions on the key store or/and the key:

  • Archivio certificati - Computer locale : è necessario avere accesso in lettura al certificato usato come chiave master della colonna o essere l'amministratore del computer.Certificate Store – Local computer - you must have the Read access to the certificate that is used a column master key, or be the administrator on the computer.
  • Insieme di credenziali delle chiavi di Azure : sono necessarie le autorizzazioni get, unwrapKey e verify per l'insieme di credenziali contenente la chiave master della colonna.Azure Key Vault – you need the get, unwrapKey, and verify permissions on the vault containing the column master key.
  • Provider dell'archivio chiavi (CNG) : l'autorizzazione e le credenziali obbligatorie potrebbero essere richieste quando si usa un archivio chiavi o una chiave, in base all'archivio e alla configurazione KSP.Key Store Provider (CNG) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the KSP configuration.
  • Provider del servizio di crittografia (CAPI) : potrebbero essere richieste l'autorizzazione e le credenziali obbligatorie quando si usa un archivio chiavi o una chiave, in base all'archivio e alla configurazione CSP.Cryptographic Service Provider (CAPI) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the CSP configuration.

Per altre informazioni, vedere Creare e archiviare chiavi master della colonna (Always Encrypted).For more information, see Create and Store Column Master Keys (Always Encrypted).

Esecuzione di operazioni di aggiornamento dell'applicazione livello dati quando il database o il file DACPAC usa Always EncryptedPerforming DAC Upgrade Operations when Database or DACPAC uses Always Encrypted

Leoperazioni dell'applicazione livello dati sono supportati nei file DACPAC e nei database con schemi che contengono colonne crittografate.DAC operations are supported on DACPAC files and databases with schemas containing encrypted columns. L'operazione di aggiornamento dell'applicazione livello dati richiede una particolare attenzione: vedere la procedura Aggiornare un'applicazione livello dati per le modalità di esecuzione di un aggiornamento dell'applicazione livello dati in vari strumenti, tra cui SSMS.Special considerations apply to the DAC upgrade operation – see Upgrade a Data-tier Application on how to perform a DAC upgrade operation in various tools, including SSMS.

Quando si aggiorna un database usando un file DACPAC e il file DACPAC o il database di destinazione contiene colonne crittografate, l'operazione di aggiornamento attiva un'operazione di crittografia dei dati se vengono soddisfatte tutte le condizioni seguenti:When you upgrade a database using a DACPAC and either the DACPAC or the target database has encrypted columns, the upgrade operation will trigger a data encryption operation if all of the following conditions are met:

  • Il database contiene una colonna con dati.The database contains a column with data.
  • La stessa colonna esiste nel file DACPAC.The same column exists in the DACPAC.
  • La configurazione di crittografia della colonna nel database è diversa dalla configurazione della colonna corrispondente nel file DACPAC.The encryption configuration of the column in the database is different than the configuration the corresponding column in the DACPAC. Vedere la tabella che segue per i dettagli.Please, see the below table for details.
CondizioneCondition AzioneAction
La colonna è crittografata nel file DACPAC e non è crittografata nel database.The column is encrypted in the DACPAC and it is not encrypted in the database. I dati contenuti nella colonna verranno crittografati.The data in the column will be encrypted.
La colonna non è crittografata nel file DACPAC ed è crittografata nel database.The column is not encrypted in the DACPAC and it is encrypted in the database. I dati presenti nella colonna verranno decrittografati ovvero la crittografia verrà rimossa dalla colonna.The data in the column will be decrypted (the encryption will be removed for the column).
La colonna è crittografata sia nel file DACPAC che nel database, ma la colonna nel file DACPAC usa un tipo diverso di crittografia e/o una chiave di crittografia della colonna diversa rispetto alla colonna corrispondente nel database.The column is encrypted both in the DACPAC and the database, but the column in the DACPAC uses a different encryption type or/and a different column encryption key than the corresponding column in the database. I dati presenti nella colonna verranno decrittografati e di nuovo crittografati in modo da corrispondere alla configurazione di crittografia nel file DACPAC.The data in the column will be decrypted and then re-encrypted to match the encryption configuration in the DACPAC.
Nota

Se la chiave master della colonna configurata per la colonna nel database o nel file DACPAC viene archiviata nell'insieme di credenziali delle chiavi di Azure, verrà richiesto di accedere ad Azure, a meno che l'accesso non sia già stato eseguito.If the column master key configured for the column in the database or the DACPAC is stored in Azure Key Vault, you will be prompted to sign in to Azure (if you're not already signed in).

PermissionsPermissions

Per eseguire un'operazione di aggiornamento dell'applicazione livello dati se Always Encrypted è configurato nel file DACPAC o nel database di destinazione, potrebbero essere necessarie alcune o tutte le autorizzazioni indicate di seguito, in base alle differenze tra lo schema nel file DACPAC e lo schema del database di destinazione.To perform a DAC upgrade operation if Always Encrypted is setup in the DACPAC or in the target database, you might need some or all of the below permissions, depending on the differences between the schema in the DACPAC and the target database schema.

ALTER ANY COLUMN MASTER KEY, ALTER ANY COLUMN ENCRYPTION KEY, VIEW ANY COLUMN MASTER KEY DEFINITION, VIEW ANY COLUMN ENCRYPTION KEY DEFINITIONALTER ANY COLUMN MASTER KEY, ALTER ANY COLUMN ENCRYPTION KEY, VIEW ANY COLUMN MASTER KEY DEFINITION, VIEW ANY COLUMN ENCRYPTION KEY DEFINITION

Se l'operazione di aggiornamento attiva un'operazione di crittografia dei dati, è necessario essere in grado di accedere alle chiavi master della colonna configurate per le colonne interessate:If the upgrade operation triggers a data encryption operation, you also need to be able to access column master keys configured for the impacted columns:

  • Archivio certificati - Computer locale : è necessario avere accesso in lettura al certificato usato come chiave master della colonna o essere l'amministratore del computer.Certificate Store – Local computer - you must have Read access to the certificate that is used a column master key, or be the administrator on the computer.
  • Insieme di credenziali delle chiavi di Azure : sono necessarie le autorizzazioni create, get, unwrapKey, wrapKey, signe verify per l'insieme di credenziali contenente la chiave master della colonna.Azure Key Vault – you need the create, get, unwrapKey, wrapKey, sign, and verify permissions on the vault containing the column master key.
  • Provider dell'archivio chiavi (CNG) : l'autorizzazione e le credenziali obbligatorie potrebbero essere richieste quando si usa un archivio chiavi o una chiave, in base all'archivio e alla configurazione KSP.Key Store Provider (CNG) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the KSP configuration.
  • Provider del servizio di crittografia (CAPI) : potrebbero essere richieste l'autorizzazione e le credenziali obbligatorie quando si usa un archivio chiavi o una chiave, in base all'archivio e alla configurazione CSP.Cryptographic Service Provider (CAPI) – you might be prompted for the required permission and credentials when using a key store or a key, depending on the store and the CSP configuration.

Per altre informazioni, vedere Creare e archiviare chiavi master della colonna (Always Encrypted).For more information, see Create and Store Column Master Keys (Always Encrypted).

Migrazione di database con colonne crittografate con un file BACPACMigrating Databases with Encrypted Columns using BACPAC

Quando si esporta un database, tutti i dati archiviati nelle colonne crittografate vengono recuperati e inseriti nel file BACPAC risultante (in formato crittografato).When you export a database, all data stored in encrypted columns are retrieved and put into the resulting BACPAC (in encrypted form). Il file BACPAC risultante contiene anche i metadati per le chiavi di Always Encrypted.The resulting BACPAC also contains the metadata for Always Encrypted keys.

Quando si importa il file BACPAC in un database, i dati crittografati del file BACPAC vengono caricati nel database e i metadati delle chiavi di Always Encrypted vengono ricreati.When you import the BACPAC into a database, the encrypted data from the BACPAC is loaded into the database and Always Encrypted key metadata is re-created.

Se si usa un'applicazione configurata per modificare o recuperare i dati crittografati archiviati nel database di origine (quello esportato), non sono necessarie operazioni particolari per consentire all'applicazione di eseguire query sui dati crittografati nel database di destinazione, perché le chiavi presenti in entrambi i database sono le stesse.If you have an application that is configured to modify or retrieve the encrypted data stored in the source database (the one you exported), you do not need to do anything special to enable the application to query the encrypted data in the target database, as the keys in both databases are the same.

PermissionsPermissions

Sono necessarie le autorizzazioni ALTER ANY COLUMN MASTER KEY e ALTER ANY COLUMN ENCRYPTION KEY per il database di origine.You need ALTER ANY COLUMN MASTER KEY and ALTER ANY COLUMN ENCRYPTION KEY on the source database. Per il database di destinazione sono necessarie le autorizzazioni ALTER ANY COLUMN MASTER KEY, ALTER ANY COLUMN ENCRYPTION KEY, VIEW ANY COLUMN MASTER KEY DEFINITIONe VIEW ANY COLUMN ENCRYPTION .You need ALTER ANY COLUMN MASTER KEY, ALTER ANY COLUMN ENCRYPTION KEY, VIEW ANY COLUMN MASTER KEY DEFINITION, and VIEW ANY COLUMN ENCRYPTION on the target database.

Migrazione di database con colonne crittografate usando l'importazione e l'esportazione guidate di SQL ServerMigrating Databases with Encrypted Columns using SQL Server Import and Export Wizard

Rispetto all'uso dei file BACPAC, la procedura guidata di importazione ed esportazione di SQL Server offre maggiore controllo sulla modalità di gestione dei dati archiviati nelle colonne crittografate durante la migrazione dei dati.Compared to using BACPAC files, the SQL Server Import and Export Wizard gives you more control over how the data stored in encrypted columns are handled during the data migration.

  • Se l'origine dati è un database che usa Always Encrypted, è possibile configurare la connessione dell'origine dati in modo che i dati archiviati nelle colonne crittografate vengano decrittografati durante l'operazione di esportazione o rimangano crittografati.If your data source is a database using Always Encrypted, you can configure your data source connection so that the data stored in encrypted columns is decrypted during the export operation, or remains encrypted.
  • Se la destinazione dei dati è un database che usa Always Encrypted, è possibile configurare la connessione della destinazione dei dati in modo che i dati destinati alle colonne crittografate vengano crittografati.If your data target is a database using Always Encrypted, you can configure your data target connection so that the data targeting encrypted columns is encrypted.

Per abilitare la decrittografia (per l'origine dati) o la crittografia (per la destinazione dei dati), è necessario configurare la connessione dell'origine/destinazione dei dati per usare il provider di dati .Net Framework per SqlServer ed è necessario impostare le parole chiave della stringa di connessione dell'impostazione di crittografia di colonna su Abilitata.To enable decryption (for the data source) or encryption (for the data target), you need to configure your data source/target connection to use the .Net Framework Data Provider for SqlServer and you need to set the Column Encryption Setting connection string keywords to Enabled.

Nella tabella seguente sono riportati gli scenari di migrazione possibili con le modalità di interazione con Always Encrypted e la configurazione di origine e destinazione dei dati per ogni connessione.The below table lists possible migration scenarios and how they relate to Always Encrypted along with the data source and data target configuration for each connection.

ScenarioScenario Configurazione della connessione di origineSource Connection Configuration Configurazione della connessione di destinazioneTarget Connection Configuration
Crittografare i dati sulla migrazione; i dati vengono archiviati come testo non crittografato nell'origine dati e viene eseguita la migrazione nelle colonne crittografate nella destinazione dei dati.Encrypt data on migration (the data is stored as plaintext in the data source, and is migrated to encrypted columns in the data target). Provider di dati/driver: qualsiasiData provider/driver: any

Impostazione di crittografia di colonna = DisabilitataColumn Encryption Setting = Disabled

(se si usano il provider di dati .net Framework per SqlServer e .NET Framework 4.6 o versione successiva)(if .Net Framework Data Provider for SqlServer and .NET Framework 4.6 or later are used.)
(se si usano il provider di dati .net Framework per SqlServer e .NET Framework 4.6 o versione successiva)Data provider/driver: .Net Framework Data Provider for SqlServer (.NET Framework 4.6 or later required)

Impostazione di crittografia di colonna = AbilitataColumn Encryption Setting = Enabled
Decrittografare i dati sulla migrazione; i dati vengono archiviati nelle colonne crittografate dell'origine dati e viene eseguita la migrazione in testo normale nella destinazione dei dati. Se la destinazione dei dati è un database, le colonne di destinazione non vengono crittografate.Decrypt data on migration (the data is stored in encrypted columns in the data source, and it is migrated in plaintext to the data target; if the data target is a database, the target columns are not encrypted).

Nota: le tabelle di destinazione con colonne crittografate devono esistere prima della migrazione.Note: the target tables with encrypted columns must exist prior to the migration.
(se si usano il provider di dati .net Framework per SqlServer e .NET Framework 4.6 o versione successiva)Data provider/driver: .Net Framework Data Provider for SqlServer (.NET Framework 4.6 or later required)

Column Encryption Setting=EnabledColumn Encryption Setting=Enabled
Provider di dati/driver: qualsiasiData provider/driver: any

Impostazione di crittografia di colonna = DisabilitataColumn Encryption Setting = Disabled

(se si usano il provider di dati .net Framework per SqlServer e .NET Framework 4.6 o versione successiva)(if .Net Framework Data Provider for SqlServer and .NET Framework 4.6 or later are used.)
Crittografare nuovamente i dati sulla migrazione; i dati vengono archiviati nelle colonne crittografate dell'origine dati e viene eseguita la migrazione in testo normale nelle colonne della destinazione dei dati che usano tipi di crittografia diversi per le chiavi di crittografia della colonna.Re-encrypt data on migration (the data is stored in encrypted columns in the data source, and it is migrated in plaintext to the data target to the columns that use different encryption types of column encryption keys).

Nota: le tabelle di destinazione con colonne crittografate devono esistere prima della migrazione.Note: the target tables with encrypted columns must exist prior to the migration.
(se si usano il provider di dati .net Framework per SqlServer e .NET Framework 4.6 o versione successiva)Data provider/driver: .Net Framework Data Provider for SqlServer (.NET Framework 4.6 or later required)

Column Encryption Setting=EnabledColumn Encryption Setting=Enabled
(se si usano il provider di dati .net Framework per SqlServer e .NET Framework 4.6 o versione successiva)Data provider/driver: .Net Framework Data Provider for SqlServer (.NET Framework 4.6 or later required)

Column Encryption Setting=EnabledColumn Encryption Setting=Enabled
Spostare i dati crittografati senza decrittografarli.Move encrypted data without decrypting it.

Nota: le tabelle di destinazione con colonne crittografate devono esistere prima della migrazione.Note: the target tables with encrypted columns must exist prior to the migration.
Provider di dati/driver: qualsiasiData provider/driver: any
Impostazione di crittografia di colonna = DisabilitataColumn Encryption Setting = Disabled

(se si usano il provider di dati .net Framework per SqlServer e .NET Framework 4.6 o versione successiva)(if .Net Framework Data Provider for SqlServer and .NET Framework 4.6 or later are used.)
Provider di dati/driver: qualsiasiData provider/driver: any
Impostazione di crittografia di colonna = DisabilitataColumn Encryption Setting = Disabled

(se si usano il provider di dati .net Framework per SqlServer e .NET Framework 4.6 o versione successiva)(if .Net Framework Data Provider for SqlServer and .NET Framework 4.6 or later are used.)

L'utente deve avere impostato ALLOW_ENCRYPTED_VALUE_MODIFICATIONS su ON.The user must have ALLOW_ENCRYPTED_VALUE_MODIFICATIONS set to ON.

Per i dettagli, vedere Migrare dati sensibili protetti da Crittografia sempre attiva.For details, see Migrate Sensitive Data Protected by Always Encrypted.

PermissionsPermissions

Per crittografare o decrittografare i dati memorizzati nell'origine dati, sono necessarie le autorizzazioni VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION nel database di origine.To encrypt or decrypt data stored in the data source, you need the VIEW ANY COLUMN MASTER KEY DEFINITION and VIEW ANY COLUMN ENCRYPTION KEY DEFINITION permissions in the source database.

È anche necessario accedere alle chiavi master della colonna, configurate per le colonne, in cui sono archiviati i dati da crittografare o decrittografare:You also need access to column master keys, configured for the columns, storing data you are encrypted or decrypting:

  • Archivio certificati - Computer locale : è necessario avere accesso in lettura al certificato usato come chiave master della colonna o essere l'amministratore del computer.Certificate Store – Local computer - you must have the Read access to the certificate that is used a column master key, or be the administrator on the computer.
  • Insieme di credenziali delle chiavi di Azure : sono necessarie le autorizzazioni get, unwrapKey, wrapKey, sign e verify per l'insieme di credenziali contenente la chiave master della colonna.Azure Key Vault – you need the get, unwrapKey, wrapKey, sign, and verify permissions on the vault containing the column master key.
  • Provider dell'archivio chiavi (CNG) : l'autorizzazione e le credenziali richieste quando si usa un archivio chiavi o una chiave, in base all'archivio e alla configurazione KSP.Key Store Provider (CNG) – the required permission and credentials, you might be prompted for when using a key store or a key, depend on the store and the KSP configuration.
  • Provider del servizio di crittografia (CAPI) : l'autorizzazione e le credenziali richieste quando si usa un archivio chiavi o una chiave, in base all'archivio e alla configurazione CSP.Cryptographic Service Provider (CAPI) – the required permission and credentials, you might be prompted for when using a key store or a key, depend on the store and the CSP configuration. Per altre informazioni, vedere Creare e archiviare chiavi master della colonna (Always Encrypted).For more information, see Create and Store Column Master Keys (Always Encrypted).

Vedere ancheSee Also