Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
Banco de Dados SQL do Azure Synapse Analytics
no 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)