ENCRYPTBYKEY (Transact-SQL)ENCRYPTBYKEY (Transact-SQL)

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

Crittografa dati tramite una chiave simmetrica.Encrypts data by using a symmetric key.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax


EncryptByKey ( key_GUID , { 'cleartext' | @cleartext }  
    [, { add_authenticator | @add_authenticator }  
     , { authenticator | @authenticator } ] )  

ArgomentiArguments

key_GUIDkey_GUID
È il GUID della chiave da utilizzare per crittografare il come testo non crittografato.Is the GUID of the key to be used to encrypt the cleartext. uniqueidentifier.uniqueidentifier.

'come testo non crittografato''cleartext'
Dati da crittografare tramite la chiave.Is the data that is to be encrypted with the key.

@cleartext
È una variabile di tipo nvarchar, char, varchar, binario, varbinary, o nchar che contiene i dati che deve essere crittografata con la chiave.Is a variable of type nvarchar, char, varchar, binary, varbinary, or nchar that contains data that is to be encrypted with the key.

add_authenticatoradd_authenticator
Indica se un autenticatore verrà crittografato con la come testo non crittografato.Indicates whether an authenticator will be encrypted together with the cleartext. Deve essere 1 se si usa un autenticatore.Must be 1 when using an authenticator. int.int.

@add_authenticator
Indica se un autenticatore verrà crittografato con la come testo non crittografato.Indicates whether an authenticator will be encrypted together with the cleartext. Deve essere 1 se si usa un autenticatore.Must be 1 when using an authenticator. int.int.

autenticatoreauthenticator
Dati da cui derivare un autenticatore.Is the data from which to derive an authenticator. sysname.sysname.

@authenticator
Variabile contenente i dati da cui derivare un autenticatore.Is a variable that contains data from which to derive an authenticator.

Tipi restituitiReturn Types

varbinary con una dimensione massima di 8.000 byte.varbinary with a maximum size of 8,000 bytes.

Restituisce NULL se la chiave non è aperta, non esiste o se è una chiave RC4 deprecata e il database non è nel livello di compatibilità 110 o superiore.Returns NULL if the key is not open, if the key does not exist, or if the key is a deprecated RC4 key and the database is not in compatibility level 110 or higher.

OsservazioniRemarks

EncryptByKey usa una chiave simmetrica.EncryptByKey uses a symmetric key. Tale chiave deve essere aperta.This key must be open. Se la chiave simmetrica è già aperta nella sessione corrente, non è necessario aprirla nuovamente nel contesto della query.If the symmetric key is already open in the current session, you do not have to open it again in the context of the query.

L'autenticatore consente di ridurre la sostituzione di valori interi dei campi crittografati.The authenticator helps you deter whole-value substitution of encrypted fields. Si consideri, ad esempio, la tabella seguente contenente dati relativi alle retribuzioni.For example, consider the following table of payroll data.

Employee_IDEmployee_ID Standard_TitleStandard_Title Base_PayBase_Pay
345345 Copy Room AssistantCopy Room Assistant Fskj%7^edhn00Fskj%7^edhn00
697697 Chief Financial OfficerChief Financial Officer M0x8900f56543M0x8900f56543
694694 Data Entry SupervisorData Entry Supervisor Cvc97824%^34fCvc97824%^34f

Senza violare la crittografia, un utente malintenzionato è in grado di dedurre informazioni significative dal contesto in cui è archiviato il testo crittografato.Without breaking the encryption, a malicious user can infer significant information from the context in which the ciphertext is stored. Poiché la retribuzione del ruolo Chief Financial Officer è maggiore di quella del ruolo Copy Room Assistant, è necessario che il valore crittografato come M0x8900f56543 sia maggiore di quello crittografato come Fskj%7^edhn00.Because a Chief Financial Officer is paid more than a Copy Room Assistant, it follows that the value encrypted as M0x8900f56543 must be greater than the value encrypted as Fskj%7^edhn00. In questo caso, qualsiasi utente che disponga dell'autorizzazione ALTER per la tabella è in grado di aumentare la retribuzione del ruolo Copy Room Assistant sostituendo i dati nel campo Base_Pay corrispondente con una copia dei dati archiviati nel campo Base_Pay relativo al ruolo Chief Financial Officer.If so, any user with ALTER permission on the table can give the Copy Room Assistant a raise by replacing the data in his Base_Pay field with a copy of the data stored in the Base_Pay field of the Chief Financial Officer. Questo attacco di sostituzione dell'intero valore è quindi in grado di agire nonostante la crittografia.This whole-value substitution attack bypasses encryption altogether.

Gli attacchi basati sulla sostituzione dell'intero valore possono essere ostacolati tramite l'aggiunta di informazioni contestuali al testo normale prima di procedere alla sua crittografia.Whole-value substitution attacks can be thwarted by adding contextual information to the plaintext before encrypting it. Tali informazioni sono usate per verificare che i dati in formato testo normale non siano stati spostati.This contextual information is used to verify that the plaintext data has not been moved.

Se per la crittografia dei dati è specificato un parametro di autenticazione, è necessario usare lo stesso autenticatore per decrittografare i dati tramite DecryptByKey.If an authenticator parameter is specified when data is encrypted, the same authenticator is required to decrypt the data by using DecryptByKey. Al momento dell'esecuzione della crittografia, un hash dell'autenticatore viene crittografato insieme al testo normale.At encryption time, a hash of the authenticator is encrypted together with the plaintext. Durante la fase di decrittografia, è necessario passare lo stesso autenticatore a DecryptByKey.At decryption time, the same authenticator must be passed to DecryptByKey. Se gli autenticatori non corrispondono, la decrittografia non è possibile.If the two do not match, the decryption will fail. Questo indica che il valore è stato spostato successivamente all'esecuzione della crittografia.This indicates that the value has been moved since it was encrypted. È consigliabile usare una colonna contenente un valore univoco e non modificabile come autenticatore.We recommend using a column containing a unique and unchanging value as the authenticator. Se il valore dell'autenticatore viene modificato, si può perdere l'accesso ai dati.If the authenticator value changes, you might lose access to the data.

La crittografia e decrittografia simmetriche sono operazioni relativamente veloci, ideali per operazioni basate su quantità elevate di dati.Symmetric encryption and decryption is relatively fast, and is suitable for working with large amounts of data.

Importante

L'uso delle funzioni di crittografia di SQL ServerSQL Server con l'impostazione ANSI_PADDING OFF può provocare la perdita di dati a causa delle conversioni implicite.Using the SQL ServerSQL Server encryption functions together with the ANSI_PADDING OFF setting could cause data loss because of implicit conversions. Per ulteriori informazioni relative ad ANSI_PADDING, vedere SET ANSI_PADDING ( Transact-SQL ) .For more information about ANSI_PADDING, see SET ANSI_PADDING (Transact-SQL).

EsempiExamples

La funzionalità illustrata negli esempi seguenti si basa sulle chiavi e certificati creati in procedura: crittografare una colonna di dati.The functionality illustrated in the following examples relies on keys and certificates created in How To: Encrypt a Column of Data.

A.A. Crittografia di una stringa tramite una chiave simmetricaEncrypting a string with a symmetric key

Nell'esempio seguente viene aggiunta una colonna alla tabella Employee, quindi viene crittografato il valore del numero di previdenza sociale archiviato nella colonna NationalIDNumber.The following example adds a column to the Employee table, and then encrypts the value of the Social Security number that is stored in column NationalIDNumber.

USE AdventureWorks2012;  
GO  

-- Create a column in which to store the encrypted data.  
ALTER TABLE HumanResources.Employee  
    ADD EncryptedNationalIDNumber varbinary(128);   
GO  

-- Open the symmetric key with which to encrypt the data.  
OPEN SYMMETRIC KEY SSN_Key_01  
   DECRYPTION BY CERTIFICATE HumanResources037;  

-- Encrypt the value in column NationalIDNumber with symmetric key  
-- SSN_Key_01. Save the result in column EncryptedNationalIDNumber.  
UPDATE HumanResources.Employee  
SET EncryptedNationalIDNumber  
    = EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);  
GO  

B.B. Crittografia di un record assieme a un valore di autenticazioneEncrypting a record together with an authentication value

USE AdventureWorks2012;  

-- Create a column in which to store the encrypted data.  
ALTER TABLE Sales.CreditCard.   
    ADD CardNumber_Encrypted varbinary(128);   
GO  

-- Open the symmetric key with which to encrypt the data.  
OPEN SYMMETRIC KEY CreditCards_Key11  
    DECRYPTION BY CERTIFICATE Sales09;  

-- Encrypt the value in column CardNumber with symmetric   
-- key CreditCards_Key11.  
-- Save the result in column CardNumber_Encrypted.    
UPDATE Sales.CreditCard  
SET CardNumber_Encrypted = EncryptByKey(Key_GUID('CreditCards_Key11'),   
    CardNumber, 1, CONVERT( varbinary, CreditCardID) );  
GO  

Vedere ancheSee Also

DECRYPTBYKEY ( Transact-SQL ) DECRYPTBYKEY (Transact-SQL)
CREATE SYMMETRIC KEY (Transact-SQL) CREATE SYMMETRIC KEY (Transact-SQL)
ALTER SYMMETRIC KEY (Transact-SQL) ALTER SYMMETRIC KEY (Transact-SQL)
DROP SYMMETRIC KEY (Transact-SQL) DROP SYMMETRIC KEY (Transact-SQL)
Gerarchia di crittografia Encryption Hierarchy
HASHBYTES ( Transact-SQL )HASHBYTES (Transact-SQL)