Compartilhar via


DECRYPTBYKEYAUTOCERT (Transact-SQL)

Aplica-se a:SQL ServerInstância Gerenciada de SQL do Azure

Essa função descriptografa dados com uma chave simétrica. Essa chave simétrica descriptografa automaticamente com um certificado.

Convenções de sintaxe de Transact-SQL

Sintaxe

DECRYPTBYKEYAUTOCERT ( cert_ID , cert_password
    , { 'ciphertext' | @ciphertext }
  [ , { add_authenticator | @add_authenticator }
  [ , { authenticator | @authenticator } ] ] )

Argumentos

cert_ID

A ID do certificado usado para proteger a chave simétrica. cert_ID tem um tipo de dados int.

cert_password

A senha usada para criptografar a chave privada do certificado. Pode ter um NULL valor se a DMK (chave mestra) do banco de dados proteger a chave privada. cert_password tem um tipo de dados nvarchar.

'ciphertext'

A cadeia de caracteres de dados criptografados com a chave. ciphertext tem um tipo de dados varbinary.

@ciphertext

Uma variável do tipo varbinary que contém dados criptografados com a chave.

add_authenticator

Indica se o processo de criptografia original incluía, e criptografava, um autenticador junto com o texto não criptografado. Deve corresponder ao valor passado para ENCRYPTBYKEY durante o processo de criptografia de dados. add_authenticator teria um valor de 1, se o processo de criptografia usasse um autenticador. add_authenticator tem um tipo de dados int.

@add_authenticator

Uma variável que indica se o processo de criptografia original incluía, e criptografava, um autenticador junto com o texto não criptografado. Deve corresponder ao valor passado para ENCRYPTBYKEY durante o processo de criptografia de dados. @add_authenticator tem um tipo de dados int.

authenticator

Os dados usados como base para a geração do autenticador. Deve corresponder ao valor fornecido para ENCRYPTBYKEY. authenticator tem um tipo de dados sysname.

@authenticator

Uma variável que contém dados dos quais um autenticador é gerado. Deve corresponder ao valor fornecido para ENCRYPTBYKEY. @authenticator tem um tipo de dados sysname.

Tipos de retorno

varbinary, com um tamanho máximo de 8.000 bytes.

Comentários

DECRYPTBYKEYAUTOCERT combina a funcionalidade de OPEN SYMMETRIC KEY e de DECRYPTBYKEY. Em uma única operação, ele primeiro descriptografa uma chave simétrica e depois descriptografa o texto cifrado com ela.

Permissões

Requer a permissão VIEW DEFINITION na chave simétrica e a permissão CONTROL no certificado.

Exemplos

Este exemplo mostra como DECRYPTBYKEYAUTOCERT pode simplificar o código de descriptografia. Esse código deve ser executado em um AdventureWorks2025 banco de dados que ainda não tenha um DMK. Substitua por <password> uma senha forte.

--Create the keys and certificate.
USE AdventureWorks2022;

CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';

OPEN MASTER KEY DECRYPTION BY PASSWORD = '<password>';

CREATE CERTIFICATE HumanResources037
    WITH SUBJECT = 'Sammamish HR', EXPIRY_DATE = '10/31/2035';

CREATE SYMMETRIC KEY SSN_Key_01
    WITH ALGORITHM = AES_256
    ENCRYPTION BY CERTIFICATE HumanResources037;
GO

----Add a column of encrypted data.
ALTER TABLE HumanResources.Employee
    ADD EncryptedNationalIDNumber VARBINARY (128);

OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037;

UPDATE HumanResources.Employee
    SET EncryptedNationalIDNumber = EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);
GO

--
--Close the key used to encrypt the data.
CLOSE SYMMETRIC KEY SSN_Key_01;
--
--There are two ways to decrypt the stored data.
--
--OPTION ONE, using DecryptByKey()
--1. Open the symmetric key
--2. Decrypt the data
--3. Close the symmetric key

OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037;

SELECT NationalIDNumber,
       EncryptedNationalIDNumber AS 'Encrypted ID Number',
       CONVERT (NVARCHAR, DecryptByKey(EncryptedNationalIDNumber)) AS 'Decrypted ID Number'
FROM HumanResources.Employee;

CLOSE SYMMETRIC KEY SSN_Key_01;
--
--OPTION TWO, using DECRYPTBYKEYAUTOCERT()

SELECT NationalIDNumber,
       EncryptedNationalIDNumber AS 'Encrypted ID Number',
       CONVERT (NVARCHAR, DECRYPTBYKEYAUTOCERT(cert_ID('HumanResources037'), NULL, EncryptedNationalIDNumber)) AS 'Decrypted ID Number'
FROM HumanResources.Employee;