Always Encrypted (Motore di database)Always Encrypted (Database Engine)

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

Always EncryptedAlways Encrypted

Always Encrypted è una funzionalità progettata per proteggere dati sensibili, ad esempio numeri di carta di credito, codici fiscali, passaporti, ecc. archiviati in database Database SQL di AzureAzure SQL Database o SQL ServerSQL Server .Always Encrypted is a feature designed to protect sensitive data, such as credit card numbers or national identification numbers (e.g. U.S. social security numbers), stored in Database SQL di AzureAzure SQL Database or SQL ServerSQL Server databases. Always Encrypted consente ai client di crittografare dati sensibili all'interno di applicazioni client senza mai rivelare le chiavi di crittografia a Motore di databaseDatabase Engine ( Database SQLSQL Database o SQL ServerSQL Server).Always Encrypted allows clients to encrypt sensitive data inside client applications and never reveal the encryption keys to the Motore di databaseDatabase Engine ( Database SQLSQL Database or SQL ServerSQL Server). Di conseguenza, Crittografia sempre attiva crea una separazione tra chi possiede i dati (e può visualizzarli) e chi gestisce i dati (ma non può accedervi).As a result, Always Encrypted provides a separation between those who own the data (and can view it) and those who manage the data (but should have no access). Garantendo l'impossibilità di accesso ai dati crittografati da parte di amministratori di database locali, operatori di database cloud o altri utenti con privilegi elevati ma non autorizzati, Crittografia sempre attiva consente ai clienti di archiviare in modo sicuro i dati sensibili su cui non esercitano un controllo diretto.By ensuring on-premises database administrators, cloud database operators, or other high-privileged, but unauthorized users, cannot access the encrypted data, Always Encrypted enables customers to confidently store sensitive data outside of their direct control. In questo modo le organizzazioni possono crittografare i dati inattivi e in uso per l'archiviazione in Azure, delegare l'amministrazione di database locali a terze parti o ridurre i requisiti di nulla osta di sicurezza per il proprio personale DBA.This allows organizations to encrypt data at rest and in use for storage in Azure, to enable delegation of on-premises database administration to third parties, or to reduce security clearance requirements for their own DBA staff.

Crittografia sempre attiva esegue la crittografia trasparente alle applicazioni.Always Encrypted makes encryption transparent to applications. A questo scopo, un driver abilitato per Crittografia sempre attiva installato nel computer client esegue automaticamente la crittografia e la decrittografia dei dati sensibili nell'applicazione client.An Always Encrypted-enabled driver installed on the client computer achieves this by automatically encrypting and decrypting sensitive data in the client application. Il driver esegue la crittografia dei dati in colonne sensibili prima di passarli a Motore di databaseDatabase Enginee riscrive automaticamente le query in modo da mantenere la semantica per l'applicazione.The driver encrypts the data in sensitive columns before passing the data to the Motore di databaseDatabase Engine, and automatically rewrites queries so that the semantics to the application are preserved. Analogamente, il driver esegue in modo trasparente la decrittografia dei dati, archiviati in colonne del database crittografato, contenuti nei risultati delle query.Similarly, the driver transparently decrypts data, stored in encrypted database columns, contained in query results.

Always Encrypted è disponibile in SQL Server 2016SQL Server 2016 e Database SQLSQL Database.Always Encrypted is available in SQL Server 2016SQL Server 2016 and Database SQLSQL Database. Nelle versioni precedenti a SQL Server 2016SQL Server 2016 SP1, Always Encrypted è limitato all'edizione Enterprise. Per una presentazione di Channel 9 che include Crittografia sempre attiva, vedere il video relativo al mantenimento della protezione dei dati sensibili con Crittografia sempre attiva.(Prior to SQL Server 2016SQL Server 2016 SP1, Always Encrypted was limited to the Enterprise Edition.) For a Channel 9 presentation that includes Always Encrypted, see Keeping Sensitive Data Secure with Always Encrypted.

Scenari tipiciTypical Scenarios

Client e dati in localeClient and Data On-Premises

Un cliente ha un'applicazione client e SQL ServerSQL Server , entrambi in esecuzione in locale presso la propria sede aziendale.A customer has a client application and SQL ServerSQL Server both running on-premises, at their business location. Il cliente vuole affidare a un fornitore esterno la gestione di SQL ServerSQL Server.The customer wants to hire an external vendor to administer SQL ServerSQL Server. Per proteggere i dati sensibili archiviati in SQL ServerSQL Server, il cliente usa Crittografia sempre attiva per garantire la separazione dei compiti tra amministratori di database e amministratori di applicazioni.In order to protect sensitive data stored in SQL ServerSQL Server, the customer uses Always Encrypted to ensure the separation of duties between database administrators and application administrators. Il cliente archivia i valori di testo non crittografato delle chiavi di Crittografia sempre attiva in un archivio di chiavi attendibili al quale l'applicazione client può accedere.The customer stores plaintext values of Always Encrypted keys in a trusted key store which the client application can access. Gli amministratori di SQL ServerSQL Server non hanno accesso alle chiavi e, quindi, non possono decrittografare i dati sensibili archiviati in SQL ServerSQL Server. SQL ServerSQL Server administrators have no access to the keys and, therefore, are unable to decrypt sensitive data stored in SQL ServerSQL Server.

Client locale con dati in AzureClient On-Premises with Data in Azure

Un cliente ha un'applicazione client locale presso la propria sede aziendale.A customer has an on-premises client application at their business location. L'applicazione usa dati sensibili archiviati in un database ospitato in Azure ( Database SQLSQL Database o SQL ServerSQL Server in esecuzione in una macchina virtuale in Microsoft Azure).The application operates on sensitive data stored in a database hosted in Azure ( Database SQLSQL Database or SQL ServerSQL Server running in a virtual machine on Microsoft Azure). Il cliente usa Always Encrypted e archivia le relative chiavi in un archivio attendibile ospitato localmente, per assicurarsi che gli amministratori cloud di MicrosoftMicrosoft non abbiano accesso ai dati sensibili.The customer uses Always Encrypted and stores Always Encrypted keys in a trusted key store hosted on-premises, to ensure MicrosoftMicrosoft cloud administrators have no access to sensitive data.

Client e dati in AzureClient and Data in Azure

Un cliente ha un'applicazione client, ospitata in Microsoft Azure (ad esempio in un ruolo di lavoro o in un ruolo web), che usa dati sensibili anch'essi archiviati in Microsoft Azure. (SQL Database o SQL Server sono eseguiti in un computer virtuale di Microsoft Azure).A customer has a client application, hosted in Microsoft Azure (e.g. in a worker role or a web role), which operates on sensitive data stored in a database hosted in Azure (SQL Database or SQL Server running in a virtual machine on Microsoft Azure). Sebbene Always Encrypted non assicura isolamento completo dei dati dagli amministratori di cloud perché sia i dati sia le chiavi sono esposti agli amministratori di cloud della piattaforma che ospita il livello client, il cliente tuttavia può beneficiare della riduzione della superficie di attacco della sicurezza (i dati nel database sono sempre crittografati).Although Always Encrypted does not provide complete isolation of data from cloud administrators, as both the data and keys are exposed to cloud administrators of the platform hosting the client tier, the customer still benefits from reducing the security attack surface area (the data is always encrypted in the database).

FunzionamentoHow it Works

È possibile configurare Always Encrypted per le singole colonne di un database che contengono dati sensibili.You can configure Always Encrypted for individual database columns containing your sensitive data. Quando si imposta la crittografia per una colonna, si specificano le informazioni sulle chiavi crittografiche e sugli algoritmi di crittografia usati per proteggere i dati nella colonna.When setting up encryption for a column, you specify the information about the encryption algorithm and cryptographic keys used to protect the data in the column. Always Encrypted usa due tipi di chiavi: chiavi di crittografia della colonna e chiavi master della colonna.Always Encrypted uses two types of keys: column encryption keys and column master keys. Una chiave di crittografia della colonna viene usata per crittografare i dati in una colonna crittografata.A column encryption key is used to encrypt data in an encrypted column. Una chiave master della colonna è una chiave di protezione a livello chiave che crittografa una o più chiavi di crittografia della colonna.A column master key is a key-protecting key that encrypts one or more column encryption keys.

Il motore di database memorizza la configurazione di crittografia per ogni colonna nei metadati di database.The Database Engine stores encryption configuration for each column in database metadata. Si noti tuttavia che il motore di database non archivia e non usa le chiavi di nessun tipo in testo non crittografato.Note, however, the Database Engine never stores or uses the keys of either type in plaintext. Archivia solo i valori crittografati delle chiavi di crittografia della colonna e le informazioni relative al percorso di chiavi master della colonna, che vengono archiviati in attendibili archivi chiavi esterni, ad esempio l'insieme di credenziali delle chiave di Azure, archivio di certificati di Windows su un computer client o su un modulo di protezione hardware.It only stores encrypted values of column encryption keys and the information about the location of column master keys, which are stored in external trusted key stores, such as Azure Key Vault, Windows Certificate Store on a client machine, or a hardware security module.

Per accedere ai dati archiviati in una colonna crittografata in testo non crittografato, un'applicazione deve usare un driver client abilitato a Always Encrypted.To access data stored in an encrypted column in plaintext, an application must use an Always Encrypted enabled client driver. Quando un'applicazione esegue una query con parametri, il driver collabora in modo trasparente con il motore di database per determinare quali parametri interessano le colonne crittografate e per questo motivo devono essere crittografati.When an application issues a parameterized query, the driver transparently collaborates with the Database Engine to determine which parameters target encrypted columns and, thus, should be encrypted. Per ogni parametro che deve essere crittografato, il driver ottiene le informazioni sull'algoritmo di crittografia e sul valore crittografato della chiave di crittografia della colonna, le destinazioni del parametro e il percorso della chiave master della colonna corrispondente.For each parameter that needs to be encrypted, the driver obtains the information about the encryption algorithm and the encrypted value of the column encryption key for the column, the parameter targets, as well as the location of its corresponding column master key.

Successivamente, il driver contatta l'archivio chiavi, che contiene la chiave master della colonna, per decrittografare il valore della chiave di crittografia della colonna crittografata e usa quindi la chiave di crittografia in testo non crittografato per crittografare il parametro.Next, the driver contacts the key store, containing the column master key, in order to decrypt the encrypted column encryption key value and then, it uses the plaintext column encryption key to encrypt the parameter. La risultante chiave di crittografia della colonna in testo non crittografato è memorizzata nella cache per ridurre il numero di round trip all'archivio chiavi nei successivi usi della stessa chiave di crittografia della colonna.The resultant plaintext column encryption key is cached to reduce the number of round trips to the key store on subsequent uses of the same column encryption key. Il driver sostituisce i valori di testo non crittografato dei parametri che interessano colonne crittografate con i relativi valori crittografati e invia la query al server per l'elaborazione.The driver substitutes the plaintext values of the parameters targeting encrypted columns with their encrypted values, and it sends the query to the server for processing.

Il server elabora il set di risultati e per ogni dato crittografato incluso nel set dei risultati, il driver allega i metadati di crittografia per la colonna, includendo le informazioni sull'algoritmo di crittografia e sulla chiavi corrispondenti.The server computes the result set, and for any encrypted includes in the result set, the driver attaches the encryption metadata for the column, including the information about the encryption algorithm and the corresponding keys. Il driver tenta innanzitutto di trovare la chiave di crittografia della colonna in testo non crittografato nella cache locale ed esegue solo un round alla chiave master della colonna, se non può trovarla nella cache.The driver first tries to find the plaintext column encryption key in the local cache, and only makes a round to the column master key, if it cannot find the key in the cache. Successivamente, il driver decrittografa i risultati e restituisce valori in testo non crittografato per l'applicazione.Next, the driver decrypts the results and returns plaintext values to the application.

Il driver del client interagisce con un archivio chiavi, che contiene la chiave master di colonna, tramite il provider di archivio chiavi della colonna, il quale è un componente software sul lato client che incapsula un archivio chiavi contenente la chiave master della colonna.A client driver interacts with a key store, containing a column master key, using a column master key store provider, which is a client-side software component that encapsulates a key store containing the column master key. I provider dei tipi più comuni di archivi chiavi sono disponibili nelle librerie di driver lato client di Microsoft o come download autonomi.Providers for common types of key stores are available in client side driver libraries from Microsoft or as standalone downloads. È anche possibile implementare un provider personalizzato.You can also implement your own provider. Le funzionalità Always Encrypted, compresi i provider predefiniti di archivio chiavi master della colonna, variano in base a una libreria di driver e alla relativa versione.Always Encrypted capabilities, including built-in column master key store providers, vary by a driver library and its version.

Per informazioni dettagliate su come sviluppare applicazioni che usano Always Encrypted con driver client particolari, vedere Always Encrypted (sviluppo di client).For details of how to develop applications using Always Encrypted with particular client drivers, see Always Encrypted (client development).

Selezione della crittografia deterministica o casualeSelecting Deterministic or Randomized Encryption

Il motore di database non agisce mai sui dati in testo non crittografato archiviati in colonne crittografate, ma supporta alcune query sui dati crittografati, a seconda del tipo di crittografia per la colonna.The Database Engine never operates on plaintext data stored in encrypted columns, but it still supports some queries on encrypted data, depending on the encryption type for the column. Crittografia sempre attiva supporta due tipi di crittografia: crittografia casuale e crittografia deterministica.Always Encrypted supports two types of encryption: randomized encryption and deterministic encryption.

  • La crittografia deterministica genera sempre lo stesso valore crittografato per ogni valore specifico di testo non crittografato.Deterministic encryption always generates the same encrypted value for any given plain text value. L'uso della crittografia deterministica consente le ricerche di punti, join di uguaglianza, raggruppamento e indicizzazione di colonne crittografate.Using deterministic encryption allows point lookups, equality joins, grouping and indexing on encrypted columns. Tuttavia, potrebbe anche consentire a utenti non autorizzati di indovinare le informazioni sui valori crittografati esaminando i modelli della colonna crittografata, soprattutto se è incluso un piccolo set di valori crittografati, ad esempio True/False, o aree Nord/Sud/Est/Ovest.However, but may also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column, especially if there is a small set of possible encrypted values, such as True/False, or North/South/East/West region. La crittografia deterministica deve usare regole di confronto a livello di colonna con un ordinamento binario2 per colonne di tipo carattere.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

  • La crittografia casuale usa un metodo di crittografia dei dati meno prevedibile.Randomized encryption uses a method that encrypts data in a less predictable manner. La crittografia casuale è più sicura, ma impedisce le ricerche, il raggruppamento, l'indicizzazione e il join su colonne crittografate.Randomized encryption is more secure, but prevents searching, grouping, indexing, and joining on encrypted columns.

La crittografia deterministica è consigliata per le colonne che verranno usate come parametri di ricerca o di raggruppamento, ad esempio un numero identificativo rilasciato da un ente pubblico.Use deterministic encryption for columns that will be used as search or grouping parameters, for example a government ID number. Usare la crittografia casuale per dati quali i commenti di analisi riservate, che non sono raggruppati con altri record e non vengono usati per il join di tabelle.Use randomized encryption, for data such as confidential investigation comments, which are not grouped with other records and are not used to join tables. Per informazioni dettagliate sugli algoritmi crittografici di Always Encrypted, vedere Always Encrypted.For details on Always Encrypted cryptographic algorithms, see Always Encrypted Cryptography.

Configurazione di Always EncryptedConfiguring Always Encrypted

L'installazione iniziale di Always Encrypted in un database comporta la generazione di chiavi di Always Encrypted, la creazione di metadati della chiave, la configurazione delle proprietà di crittografia di colonne di database selezionate e/o la crittografia di dati che potrebbero già esistere in colonne da crittografare.The initial setup of Always Encrypted in a database involves generating Always Encrypted keys, creating key metadata, configuring encryption properties of selected database columns, and/or encrypting data that may already exist in columns that need to be encrypted. Si noti che alcune di queste attività non sono supportate in Transact-SQL e richiedono l'uso degli strumenti sul lato client.Please note that some of these tasks are not supported in Transact-SQL and require the use of client-side tools. Poiché le chiavi di Always Encrypted e i dati sensibili e protetti non sono mai rivelati al server in testo non crittografato, il motore di database non può essere coinvolto nel provisioning della chiave e non può eseguire operazioni di crittografia o decrittografia dei dati.As Always Encrypted keys and protected sensitive data are never revealed in plaintext to the server, the Database Engine cannot be involved in key provisioning and perform data encryption or decryption operations. Per eseguire tali attività è possibile usare SQL Server Management Studio o PowerShell.You can use SQL Server Management Studio or PowerShell to accomplish such tasks.

AttivitàTask SSMSSSMS PowerShellPowerShell T-SQLT-SQL
Provisioning di chiavi master della colonna, chiavi di crittografia di colonne e chiavi di crittografia della colonna crittografata con le chiavi master della colonna corrispondenti.Provisioning column master keys, column encryption keys and encrypted column encryption keys with their corresponding column master keys. Yes Yes NoNo
Creazione di metadati della chiave nel database.Creating key metadata in the database. Yes Yes Yes
Creazione di nuove tabelle con colonne crittografateCreating new tables with encrypted columns Yes Yes Yes
Crittografia dei dati esistenti nelle colonne selezionate del databaseEncrypting existing data in selected database columns Yes Yes NoNo
Nota

Accertarsi di eseguire il provisioning delle chiavi o gli strumenti di crittografia dei dati in un ambiente protetto o in un computer diverso da quello che ospita il database.Make sure you run key provisioning or data encryption tools in a secure environment, on a computer that is different from the computer hosting your database. Altrimenti potrebbero verificarsi delle perdite di chiavi o dati sensibili verso l'ambiente del server, e questo ridurrebbe i benefici dell'uso di Always Encrypted.Otherwise, sensitive data or the keys could leak to the server environment, which would reduce the benefits of the using Always Encrypted.

Per informazioni dettagliate sulla configurazione di Always Encrypted, vedere:For details on configuring Always Encrypted see:

Introduzione a Crittografia sempre attivaGetting Started with Always Encrypted

Per iniziare a usare rapidamente questa funzionalità, eseguire la procedura guidata Always Encrypted .Use the Always Encrypted Wizard to quickly start using Always Encrypted. La procedura guidata eseguirà il provisioning di chiavi necessarie e configurerà la crittografia per le colonne selezionate.The wizard will provision the required keys and configure encryption for selected columns. Se le colonne, per le quali si sta impostando la crittografia, contengono già alcuni dati, la procedura guidata crittograferà i dati.If the columns, you are setting encryption for, already contain some data, the wizard will encrypt the data. L'esempio seguente descrive il processo per la crittografia di una colonna.The following example demonstrates the process for encrypting a column.

Nota

Per altre informazioni sull'uso della procedura guidata, vedere il video in Getting Started with Always Encrypted with SSMS (Introduzione a Always Encrypted con SSMS).For a video that includes using the wizard, see Getting Started with Always Encrypted with SSMS.

  1. Connettersi a un database esistente che contiene tabelle con colonne che si vuole crittografare usando Esplora oggetti di Management Studio oppure creare un nuovo database, creare una o più tabelle con colonne da crittografare e connettersi ad esso.Connect to an existing database that contains tables with columns you wish to encrypt using the Object Explorer of Management Studio, or create a new database, create one or more tables with columns to encrypt, and connect to it.
  2. Fare clic con il pulsante destro del mouse sul database, scegliere Attività e quindi fare clic su Crittografa colonne per aprire la Procedura guidata Always Encrypted.Right-click your database, point to Tasks, and then click** Encrypt Columns** to open the Always Encrypted Wizard.
  3. Leggere la pagina Introduzione , quindi fare clic su Avanti.Review the Introduction page, and then click Next.
  4. Nella pagina Selezione colonne espandere le tabelle e selezionare le colonne da crittografare.On the Column Selection page, expand the tables, and select the columns that you want to encrypt.
  5. Per ogni colonna selezionata da crittografare, impostare Tipo di crittografia su Deterministico o Casuale.For each column selected for encryption, set the Encryption Type to either Deterministic or Randomized.
  6. Per ogni colonna selezionata per la crittografia, selezionare una Chiave di crittografia.For each column selected for encryption, select an Encryption Key. Se in precedenza non è stata creata una chiave di crittografia per il database, selezionare l'opzione predefinita di una nuova chiave generata automaticamente e quindi fare clic su Avanti.If you have not previously created any encryption keys for this database, select the default choice of a new auto-generated key, and then click Next.
  7. Nella pagina Configurazione chiave master , selezionare un percorso per 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.
  8. Nella pagina Convalida scegliere 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.
  9. Nella pagina Riepilogo esaminare le opzioni selezionate e quindi fare clic su Fine.On the Summary page, review the options you have selected, and then click Finish. Al termine, chiudere la procedura guidata.Close the wizard when completed.

Informazioni sulle funzionalitàFeature Details

  • Le query possono eseguire il confronto di uguaglianza sulle colonne crittografate usando la crittografia deterministica, ma non altre operazioni (ad esempio maggiore/minore di, criteri di ricerca usando l'operatore LIKE o operazioni aritmetiche).Queries can perform equality comparison on columns encrypted using deterministic encryption, but no other operations (e.g. greater/less than, pattern matching using the LIKE operator, or arithmetical operations).

  • Le query sulle colonne crittografate con la crittografia casuale non possono eseguire operazioni su una qualsiasi di tali colonne.Queries on columns encrypted by using randomized encryption cannot perform operations on any of those columns. L'indicizzazione di colonne crittografate usando la crittografia casuale non è supportata.Indexing columns encrypted using randomized encryption is not supported.

  • Una chiave di crittografia della colonna può avere fino a due valori crittografati differenti, ciascuno crittografato con una chiave master della colonna diversa.A column encryption key can have up to two different encrypted values, each encrypted with a different column master key. Questa operazione facilita la rotazione delle chiavi master della colonna.This facilitates column master key rotation.

  • La crittografia deterministica richiede una colonna per disporre di uno del binary2 le regole di confronto.Deterministic encryption requires a column to have one of the binary2 collations.

  • Dopo aver modificato la definizione di un oggetto codificato, eseguire sp_refresh_parameter_encryption per aggiornare i metadati di Always Encrypted per l'oggetto.After changing the definition of an encrypted object, execute sp_refresh_parameter_encryption to update the Always Encrypted metadata for the object.

Always Encrypted non è supportata per le colonne con le caratteristiche seguenti (ad esempio, la clausola Encrypted WITH non può essere usata nell'istruzione CREATE TABLE/ALTER TABLE per una colonna, se alla colonna si applica una qualsiasi delle seguenti condizioni):Always Encrypted is not supported for the columns with the below characteristics (e.g. the Encrypted WITH clause cannot be used in CREATE TABLE/ALTER TABLE for a column, if any of the following conditions apply to the column):

  • Colonne che usano uno dei seguenti tipi di dati: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, tipi definiti dall'utente.Columns using one of the following datatypes: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, user defined-types.
  • Colonne FILESTREAMFILESTREAM columns
  • Colonne con la proprietà IDENTITYColumns with the IDENTITY property
  • Colonne con proprietà ROWGUIDCOLColumns with ROWGUIDCOL property
  • Colonne stringa (varchar, char e così via) con regole di confronto non BIN2String (varchar, char, etc.) columns with non-bin2 collations
  • Colonne che sono chiavi per gli indici non cluster che usano una colonna con crittografia casuale come colonna chiave (le colonne con crittografia deterministica sono supportate)Columns that are keys for nonclustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine)
  • Colonne che sono chiavi per gli indici cluster che usano una colonna con crittografia casuale come colonna chiave (le colonne con crittografia deterministica sono supportate)Columns that are keys for clustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine)
  • Colonne che sono chiavi per gli indici full-text contenenti colonne con crittografia casuale e deterministicaColumns that are keys for fulltext indices containing encrypted columns both randomized and deterministic
  • Colonne a cui fanno riferimento colonne calcolate (quando l'espressione esegue operazioni non supportate per Crittografia sempre attiva)Columns referenced by computed columns (when the expression does unsupported operations for Always Encrypted)
  • Set di colonne di tipo sparseSparse column set
  • Colonne a cui fanno riferimento statisticheColumns that are referenced by statistics
  • Colonne che usano il tipo di aliasColumns using alias type
  • Colonne di partizionamentoPartitioning columns
  • Colonne con vincoli predefinitiColumns with default constraints
  • Colonne a cui fanno riferimento vincoli univoci quando si usa la crittografia casuale (la crittografia deterministica è supportata)Columns referenced by unique constraints when using randomized encryption (deterministic encryption is supported)
  • Colonne di chiavi primarie quando si usa la crittografia casuale (la crittografia deterministica è supportata)Primary key columns when using randomized encryption (deterministic encryption is supported)
  • Colonne di riferimento in vincoli di chiave esterna quando si usa la crittografia casuale o la crittografia deterministica, se le colonne a cui si fa riferimento e di riferimento usano chiavi o algoritmi diversiReferencing columns in foreign key constraints when using randomized encryption or when using deterministic encryption, if the referenced and referencing columns use different keys or algorithms
  • Colonne a cui fanno riferimento vincoli CHECKColumns referenced by check constraints
  • Colonne in tabelle che usano l'acquisizione dei dati delle modificheColumns in tables that use change data capture
  • Colonne chiave primaria in tabelle contenenti il rilevamento delle modifichePrimary key columns on tables that have change tracking
  • Colonne che vengono mascherate (con la maschera dati dinamica)Columns that are masked (using Dynamic Data Masking)
  • Colonne in tabelle di estensione database.Columns in Stretch Database tables. (le tabelle con colonne crittografate con Crittografia sempre attiva possono essere abilitate per l'estensione).(Tables with columns encrypted with Always Encrypted can be enabled for Stretch.)
  • Colonne in tabelle esterne (PolyBase) (nota: l'uso di tabelle esterne e di tabelle con colonne crittografate nella stessa query è supportato)Columns in external (PolyBase) tables (note: using external tables and tables with encrypted columns in the same query is supported)
  • I parametri con valori di tabella per le colonne crittografate non sono supportati.Table-valued parameters targeting encrypted columns are not supported.

Le clausole seguenti non possono essere usate per le colonne crittografate:The following clauses cannot be used for encrypted columns:

  • FOR XMLFOR XML
  • FOR JSON PATHFOR JSON PATH

Le funzionalità seguenti non sono supportate nelle colonne crittografate:The following features do not work on encrypted columns:

  • Replica transazionale o di tipo mergeTransactional or merge replication
  • Query distribuite (server collegati)Distributed queries (linked servers)

Requisiti degli strumentiTool Requirements

  • SQL Server Management Studio può decrittografare i risultati recuperati da colonne crittografate se la connessione viene effettuata con column encryption setting=enabled nella scheda Proprietà aggiuntive della finestra di dialogo Connetti al server .SQL Server Management Studio can decrypt the results retrieved from encrypted columns if you connect with the column encryption setting=enabled in the Additional Properties tab of the Connect to Server dialog. È necessario almeno SQL Server Management Studio versione 17 per l'inserimento, l'aggiornamento o l'applicazione di un filtro alle colonne crittografate.Requires at least SQL Server Management Studio version 17 to insert, update, or filter encrypted columns.

  • Le connessioni crittografate da sqlcmd richiedono almeno la versione 13.1, disponibile nell' Area download.Encrypted connections from sqlcmd require at least version 13.1, which is available from the Download Center.

Autorizzazioni per il databaseDatabase Permissions

Esistono quattro autorizzazioni per Always Encrypted:There are four permissions for Always Encrypted:

  • ALTER ANY COLUMN MASTER KEY (Obbligatorio per creare ed eliminare una chiave master della colonna).ALTER ANY COLUMN MASTER KEY (Required to create and delete a column master key.)

  • ALTER ANY COLUMN ENCRYPTION KEY (Obbligatorio per creare ed eliminare una chiave di crittografia della colonna).ALTER ANY COLUMN ENCRYPTION KEY (Required to create and delete a column encryption key.)

  • VIEW ANY COLUMN MASTER KEY DEFINITION (Obbligatorio per accedere e leggere i metadati delle chiavi master della colonna per la gestione delle chiavi o per l'esecuzione di query su colonne crittografate).VIEW ANY COLUMN MASTER KEY DEFINITION (Required to access and read the metadata of the column master keys to manage keys or query encrypted columns.)

  • VIEW ANY COLUMN ENCRYPTION KEY DEFINITION (Obbligatorio per accedere e leggere i metadati della chiave di crittografia della colonna per la gestione delle chiavi o per l'esecuzione di query su colonne crittografate).VIEW ANY COLUMN ENCRYPTION KEY DEFINITION (Required to access and read the metadata of the column encryption key to manage keys or query encrypted columns.)

    Nella tabella seguente sono riepilogate le autorizzazioni necessarie per le azioni comuni.The following table summarizes the permissions required for common actions.

ScenarioScenario ALTER ANY COLUMN MASTER KEY ALTER ANY COLUMN ENCRYPTION KEY VIEW ANY COLUMN MASTER KEY DEFINITION VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
Gestione delle chiavi (creazione/modifica/revisione metadati delle chiavi nel database)Key management (creating/changing/reviewing key metadata in the database) XX XX XX XX
Esecuzione di query in colonne crittografateQuerying encrypted columns XX XX

Note importanti:Important notes:

  • Le autorizzazioni si applicano alle azioni tramite Transact-SQLTransact-SQL, Management StudioManagement Studio (finestre di dialogo e procedura guidata) o PowerShell.The permissions apply to actions using Transact-SQLTransact-SQL, Management StudioManagement Studio (dialog boxes and wizard), or PowerShell.

  • Le due autorizzazioni VIEW sono necessarie quando si selezionano colonne crittografate, anche se l'utente non ha l'autorizzazione di decrittografare le colonne.The two VIEW permissions are required when selecting encrypted columns, even if the user does not have permission to decrypt the columns.

  • In SQL ServerSQL Server, entrambi le autorizzazioni VIEW sono assegnate per impostazione predefinita al ruolo predefinito del database public .In SQL ServerSQL Server, both VIEW permissions are granted by default to the public fixed database role. Un amministratore di database può scegliere di revocare (o negare) le autorizzazioni VIEW per il ruolo public e assegnarle a specifici ruoli o utenti per implementare un controllo con maggiori restrizioni.A database administrator may choose to revoke (or deny) the VIEW permissions to the public role and grant them to specific roles or users to implement more restricted control.

  • In Database SQLSQL Database, le autorizzazioni VIEW non sono assegnate per impostazione predefinita al ruolo predefinito del database public .In Database SQLSQL Database, the VIEW permissions are not granted by default to the public fixed database role. In questo modo specifici strumenti esistenti (che usano le versioni precedenti di DacFx) funzionano correttamente.This enables certain existing, legacy tools (using older versions of DacFx) to work properly. Di conseguenza, per usare le colonne crittografate (anche senza decrittografarle) un amministratore del database deve concedere esplicitamente le due autorizzazioni VIEW .Consequently, to work with encrypted columns (even if not decrypting them) a database administrator must explicitly grant the two VIEW permissions.

EsempioExample

Il codice Transact-SQLTransact-SQL seguente crea metadati di una chiave master della colonna, di una chiave di crittografia della colonna e una tabella con colonne crittografate.The following Transact-SQLTransact-SQL creates column master key metadata, column encryption key metadata, and a table with encrypted columns. Per informazioni sulla creazione di chiavi, a cui fanno riferimento i metadati, vedere:For information how to create the keys, referenced in the metadata, see:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
     KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE',   
     KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'  
   );  
---------------------------------------------  
CREATE COLUMN ENCRYPTION KEY MyCEK   
WITH VALUES  
(  
    COLUMN_MASTER_KEY = MyCMK,   
    ALGORITHM = 'RSA_OAEP',   
    ENCRYPTED_VALUE = 0x01700000016C006F00630061006C006D0061006300680069006E0065002F006D0079002F003200660061006600640038003100320031003400340034006500620031006100320065003000360039003300340038006100350064003400300032003300380065006600620063006300610031006300284FC4316518CF3328A6D9304F65DD2CE387B79D95D077B4156E9ED8683FC0E09FA848275C685373228762B02DF2522AFF6D661782607B4A2275F2F922A5324B392C9D498E4ECFC61B79F0553EE8FB2E5A8635C4DBC0224D5A7F1B136C182DCDE32A00451F1A7AC6B4492067FD0FAC7D3D6F4AB7FC0E86614455DBB2AB37013E0A5B8B5089B180CA36D8B06CDB15E95A7D06E25AACB645D42C85B0B7EA2962BD3080B9A7CDB805C6279FE7DD6941E7EA4C2139E0D4101D8D7891076E70D433A214E82D9030CF1F40C503103075DEEB3D64537D15D244F503C2750CF940B71967F51095BFA51A85D2F764C78704CAB6F015EA87753355367C5C9F66E465C0C66BADEDFDF76FB7E5C21A0D89A2FCCA8595471F8918B1387E055FA0B816E74201CD5C50129D29C015895CD073925B6EA87CAF4A4FAF018C06A3856F5DFB724F42807543F777D82B809232B465D983E6F19DFB572BEA7B61C50154605452A891190FB5A0C4E464862CF5EFAD5E7D91F7D65AA1A78F688E69A1EB098AB42E95C674E234173CD7E0925541AD5AE7CED9A3D12FDFE6EB8EA4F8AAD2629D4F5A18BA3DDCC9CF7F352A892D4BEBDC4A1303F9C683DACD51A237E34B045EBE579A381E26B40DCFBF49EFFA6F65D17F37C6DBA54AA99A65D5573D4EB5BA038E024910A4D36B79A1D4E3C70349DADFF08FD8B4DEE77FDB57F01CB276ED5E676F1EC973154F86  
);  
---------------------------------------------  
CREATE TABLE Customers (  
    CustName nvarchar(60)   
        COLLATE  Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
        ENCRYPTION_TYPE = RANDOMIZED,  
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),   
    SSN varchar(11)   
        COLLATE  Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
        ENCRYPTION_TYPE = DETERMINISTIC ,  
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),   
    Age int NULL  
);  
GO  

Vedere ancheSee Also

CREATE COLUMN MASTER KEY (Transact-SQL) CREATE COLUMN MASTER KEY (Transact-SQL)
CREATE COLUMN ENCRYPTION KEY (Transact-SQL) CREATE COLUMN ENCRYPTION KEY (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
column_definition (Transact-SQL) column_definition (Transact-SQL)
sys.column_encryption_keys (Transact-SQL) sys.column_encryption_keys (Transact-SQL)
sys.column_encryption_key_values (Transact-SQL) sys.column_encryption_key_values (Transact-SQL)
sys.column_master_keys (Transact-SQL) sys.column_master_keys (Transact-SQL)
sys.columns (Transact-SQL) sys.columns (Transact-SQL)
Procedura guidata Always Encrypted Always Encrypted Wizard
Migrare dati sensibili protetti da Always Encrypted Migrate Sensitive Data Protected by Always Encrypted
Always Encrypted (sviluppo client) Always Encrypted (client development)
Crittografia Always Encrypted Always Encrypted Cryptography
Configurare Always Encrypted tramite SSMS Configurare Always Encrypted tramite PowerShell Configure Always Encrypted using SSMS Configure Always Encrypted using PowerShell
sp_refresh_parameter_encryption (Transact-SQL)sp_refresh_parameter_encryption (Transact-SQL)