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

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Criptografa dados usando uma chave simétrica.Encrypts data by using a symmetric key.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

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

ArgumentosArguments

key_GUIDkey_GUID
É o GUID da chave a ser usado para criptografar o cleartext.Is the GUID of the key to be used to encrypt the cleartext. uniqueidentifier.uniqueidentifier.

'cleartext''cleartext'
São os dados que serão criptografados com a chave.Is the data that is to be encrypted with the key.

@cleartext
É uma variável do tipo nvarchar, char, varchar, binary, varbinary ou nchar que contém dados a serem criptografados com a chave.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 um autenticador será criptografado junto com o cleartext.Indicates whether an authenticator will be encrypted together with the cleartext. Deve ser 1 ao usar um autenticador.Must be 1 when using an authenticator. int.int.

@add_authenticator
Indica se um autenticador será criptografado junto com o cleartext.Indicates whether an authenticator will be encrypted together with the cleartext. Deve ser 1 ao usar um autenticador.Must be 1 when using an authenticator. int.int.

authenticatorauthenticator
São os dados dos quais será derivado um autenticador.Is the data from which to derive an authenticator. sysname.sysname.

@authenticator
É uma variável que contém dados a partir dos quais o autenticador será derivado.Is a variable that contains data from which to derive an authenticator.

Tipos de retornoReturn Types

varbinary com um tamanho máximo de 8.000 bytes.varbinary with a maximum size of 8,000 bytes.

Retorna o NULL se a chave não estiver aberta, se a chave não existir ou se a chave for uma chave de RC4 preterida e o banco de dados não estiver no nível de compatibilidade 110 ou superior.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.

Retorna NULL se o valor cleartext é NULL.Returns NULL if the cleartext value is NULL.

RemarksRemarks

EncryptByKey usa uma chave simétrica.EncryptByKey uses a symmetric key. Essa chave deve estar aberta.This key must be open. Se a chave simétrica já estiver aberta na sessão atual, não será necessário abri-la novamente no contexto da consulta.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.

O autenticador ajuda a impedir a substituição do valor inteiro de campos criptografados.The authenticator helps you deter whole-value substitution of encrypted fields. Por exemplo, considere a tabela de dados de folha de pagamento a seguir.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

Sem quebrar a criptografia, um usuário mal-intencionado pode deduzir informações significativas a partir do contexto em que o texto cifrado é armazenado.Without breaking the encryption, a malicious user can infer significant information from the context in which the ciphertext is stored. Como um Chief Financial Officer ganha mais do que um Copy Room Assistant, deduz-se que o valor criptografado como M0x8900f56543 seja maior do que o valor criptografado como 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. Portanto, qualquer usuário com permissão ALTER na tabela pode conceder um aumento ao Copy Room Assistant substituindo os dados em seu campo Base_Pay por uma cópia dos dados armazenados no campo Base_Pay do 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. Esse ataque de substituição do valor inteiro ignora completamente a criptografia.This whole-value substitution attack bypasses encryption altogether.

Os ataques de substituição do valor inteiro podem ser impedidos adicionando-se informações contextuais ao texto não criptografado antes de criptografá-lo.Whole-value substitution attacks can be thwarted by adding contextual information to the plaintext before encrypting it. Essas informações contextuais são usadas para verificar se os dados de texto não criptografado não foram movidos.This contextual information is used to verify that the plaintext data has not been moved.

Se um parâmetro de autenticador for especificado no momento em que os dados são criptografados, o mesmo autenticador será necessário para descriptografar os dados usando o DecryptByKey.If an authenticator parameter is specified when data is encrypted, the same authenticator is required to decrypt the data by using DecryptByKey. No momento da criptografia, um hash do autenticador é criptografado com o texto não criptografado.At encryption time, a hash of the authenticator is encrypted together with the plaintext. No momento da descriptografia, o mesmo autenticador deve ser passado para a DecryptByKey.At decryption time, the same authenticator must be passed to DecryptByKey. Se não houver correspondência entre os dois, a descriptografia falhará.If the two do not match, the decryption will fail. Isso indica que o valor foi movido desde que foi criptografado.This indicates that the value has been moved since it was encrypted. Recomendamos usar uma coluna que contenha um valor exclusivo e inalterável como o autenticador.We recommend using a column containing a unique and unchanging value as the authenticator. Se o valor do autenticador for alterado, você poderá perder o acesso aos dados.If the authenticator value changes, you might lose access to the data.

A criptografia e a descriptografia simétricas são relativamente rápidas e adequadas para trabalhar com grandes quantidades de dados.Symmetric encryption and decryption is relatively fast, and is suitable for working with large amounts of data.

Importante

O uso das funções de criptografia do SQL ServerSQL Server com a configuração ANSI_PADDING OFF pode provocar perda de dados devido a conversões implícitas.Using the SQL ServerSQL Server encryption functions together with the ANSI_PADDING OFF setting could cause data loss because of implicit conversions. Para obter mais informações sobre ANSI_PADDING, veja SET ANSI_PADDING (Transact-SQL).For more information about ANSI_PADDING, see SET ANSI_PADDING (Transact-SQL).

ExemplosExamples

A funcionalidade ilustrada nos seguintes exemplos baseia-se nas chaves e nos certificados criados em Como: criptografar uma coluna de dados.The functionality illustrated in the following examples relies on keys and certificates created in How To: Encrypt a Column of Data.

A.A. Criptografando uma cadeia de caracteres com uma chave simétricaEncrypting a string with a symmetric key

O exemplo a seguir adiciona uma coluna à tabela Employee e, em seguida, criptografa o valor do número de Social Security que é armazenado na coluna 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. Criptografando um registro com um valor de autenticaçãoEncrypting 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  

Consulte TambémSee 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)
Hierarquia de criptografia Encryption Hierarchy
HASHBYTES (Transact-SQL)HASHBYTES (Transact-SQL)