Partilhar via


ENCRYPTBYKEY (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do AzureBanco de Dados SQL do Azure Synapse Analyticsno Microsoft Fabric

Criptografa dados usando uma chave simétrica.

Transact-SQL convenções de sintaxe

Observação

Essa sintaxe não é suportada pelo pool SQL sem servidor no Azure Synapse Analytics.

Sintaxe

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

Argumentos

key_GUID
É o GUID da chave a ser usada para criptografar o texto não criptografado. identificador único.

'Texto não criptografado'
São os dados que devem ser criptografados com a chave.

@cleartext
É uma variável do tipo nvarchar, char, varchar, binary, varbinary, ounchar que contém dados que devem ser criptografados com a chave.

add_authenticator
Indica se um autenticador será criptografado junto com o texto não criptografado. Deve ser 1 ao usar um autenticador. int.

@add_authenticator
Indica se um autenticador será criptografado junto com o texto não criptografado. Deve ser 1 ao usar um autenticador. int.

autenticador
São os dados dos quais derivar um autenticador. sysname.

@authenticator
É uma variável que contém dados dos quais derivar um autenticador.

Tipos de devolução

varbinary com um tamanho máximo de 8.000 bytes.

Retorna NULL se a chave não estiver aberta, se a chave não existir ou se a chave for uma chave RC4 preterida e o banco de dados não estiver no nível de compatibilidade 110 ou superior.

Retorna NULL se o valor cleartext for NULL.

Observações

EncryptByKey usa uma chave simétrica. Esta chave deve estar aberta. Se a chave simétrica já estiver aberta na sessão atual, não será necessário abri-la novamente no contexto da consulta.

O autenticador ajuda a impedir a substituição de valor total de campos criptografados. Por exemplo, considere a tabela a seguir de dados da folha de pagamento.

Employee_ID Standard_Title Base_Pay
345 Assistente de Sala de Cópias Fskj%7^edhn00
697 Diretor Financeiro M0x8900f56543
694 Supervisor de Entrada de Dados Cvc97824%^34f

Sem quebrar a criptografia, um usuário mal-intencionado pode inferir informações significativas do contexto no qual o texto cifrado está armazenado. Como um Diretor Financeiro recebe mais do que um Assistente de Sala de Cópia, segue-se que o valor criptografado como M0x8900f56543 deve ser maior do que o valor criptografado como Fskj%7^edhn00. Em caso afirmativo, qualquer usuário com permissão ALTER na tabela pode aumentar o Assistente da Sala de Cópia, substituindo os dados em seu campo Base_Pay por uma cópia dos dados armazenados no campo Base_Pay do Diretor Financeiro. Esse ataque de substituição de valor total ignora completamente a criptografia.

Os ataques de substituição de valor total podem ser frustrados adicionando informações contextuais ao texto sem formatação antes de criptografá-lo. Essas informações contextuais são usadas para verificar se os dados de texto sem formatação não foram movidos.

Se um parâmetro de autenticador for especificado quando os dados forem criptografados, o mesmo autenticador será necessário para descriptografar os dados usando DecryptByKey. No momento da encriptação, um hash do autenticador é encriptado juntamente com o texto simples. No momento da desencriptação, o mesmo autenticador deve ser passado para DecryptByKey. Se os dois não corresponderem, a desencriptação falhará. Isso indica que o valor foi movido desde que foi criptografado. Recomendamos o uso de uma coluna que contenha um valor exclusivo e imutável como autenticador. Se o valor do autenticador for alterado, você poderá perder o acesso aos dados.

A encriptação e desencriptação simétricas são relativamente rápidas e adequadas para trabalhar com grandes quantidades de dados.

Importante

Usar as funções de criptografia do SQL Server junto com a configuração ANSI_PADDING OFF pode causar perda de dados devido a conversões implícitas. Para obter mais informações sobre ANSI_PADDING, consulte SET ANSI_PADDING (Transact-SQL).

Exemplos

A funcionalidade ilustrada nos exemplos a seguir depende de chaves e certificados criados em Como: Criptografar uma coluna de dados.

Um. Criptografando uma cadeia de caracteres com uma chave simétrica

O exemplo a Employee seguir adiciona uma coluna à tabela e, em seguida, criptografa o valor do número de segurança social armazenado na coluna NationalIDNumber.

USE AdventureWorks2022;  
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. Criptografando um registro junto com um valor de autenticação

USE AdventureWorks2022;  
  
-- 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  

Ver também

DECRYPTBYKEY (Transact-SQL)
CRIAR CHAVE SIMÉTRICA (Transact-SQL)
ALTER CHAVE SIMÉTRICA (Transact-SQL)
CHAVE SIMÉTRICA DE GOTA (Transact-SQL)
Hierarquia de criptografia
HASHBYTES (Transact-SQL)