Partilhar via


DECRYPTBYKEYAUTOASYMKEY (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL Managed Instance

Esta função desencripta dados encriptados. Primeiro, desencripta uma chave simétrica com uma chave assimétrica separada e, em seguida, desencripta os dados encriptados com a chave simétrica extraída no primeiro passo.

Transact-SQL convenções de sintaxe

Sintaxe

DECRYPTBYKEYAUTOASYMKEY ( akey_ID , akey_password
    , { 'ciphertext' | @ciphertext }
  [ , { add_authenticator | @add_authenticator }
  [ , { authenticator | @authenticator } ] ] )

Arguments

akey_ID

A ID da chave assimétrica usada para criptografar a chave simétrica. akey_ID tem um tipo de dados int .

akey_password

A senha que protege a chave assimétrica. akey_password pode ter um NULL valor se a chave mestra do banco de dados (DMK) proteger a chave privada assimétrica. akey_password tem um tipo de dados nvarchar .

texto cifrado

Os dados encriptados com a chave. CipherText tem um tipo de dados varbinary .

@ciphertext

Uma variável do tipo varbinary contendo dados criptografados com a chave simétrica.

add_authenticator

Indica se o processo de criptografia original incluiu e criptografou um autenticador junto com o texto sem formatação. Deve corresponder ao valor passado para ENCRYPTBYKEY durante o processo de criptografia de dados. add_authenticator tem um valor de 1 se o processo de criptografia usou um autenticador. add_authenticator tem um tipo de dados int .

@add_authenticator

Uma variável que indica se o processo de encriptação original incluía e encriptava um autenticador juntamente com o texto simples. Deve corresponder ao valor passado para ENCRYPTBYKEY durante o processo de criptografia de dados. @add_authenticator tem um tipo de dados int .

autenticador

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

@authenticator

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

@add_authenticator

Uma variável que indica se o processo de encriptação original incluía e encriptava um autenticador juntamente com o texto simples. Deve corresponder ao valor passado para ENCRYPTBYKEY durante o processo de criptografia de dados. @add_authenticator tem um tipo de dados int .

autenticador

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

@authenticator

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

Tipos de devolução

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

Observações

DECRYPTBYKEYAUTOASYMKEY combina a funcionalidade de ambos e OPEN SYMMETRIC KEYDECRYPTBYKEY. Numa única operação, primeiro desencripta uma chave simétrica e, em seguida, desencripta o texto cifrado encriptado com essa chave.

Permissions

Requer VIEW DEFINITION permissão na chave simétrica e CONTROL permissão na chave assimétrica.

Examples

Este exemplo mostra como DECRYPTBYKEYAUTOASYMKEY pode simplificar o código de desencriptação. Esse código deve ser executado em um AdventureWorks2025 banco de dados que ainda não tenha um DMK. Substitua <password> por 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 ASYMMETRIC KEY SSN_AKey
    WITH ALGORITHM = RSA_2048;
GO

CREATE SYMMETRIC KEY SSN_Key_02
    WITH ALGORITHM = DES
    ENCRYPTION BY ASYMMETRIC KEY SSN_AKey;
GO

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

OPEN SYMMETRIC KEY SSN_Key_02 DECRYPTION BY ASYMMETRIC KEY SSN_AKey;

UPDATE HumanResources.Employee
    SET EncryptedNationalIDNumber2 = EncryptByKey(Key_GUID('SSN_Key_02'), NationalIDNumber);
GO

--Close the key used to encrypt the data.
CLOSE SYMMETRIC KEY SSN_Key_02;
--
--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_02 DECRYPTION BY ASYMMETRIC KEY SSN_AKey;

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

CLOSE SYMMETRIC KEY SSN_Key_02;

--OPTION TWO, using DECRYPTBYKEYAUTOASYMKEY()
SELECT NationalIDNumber,
       EncryptedNationalIDNumber2 AS 'Encrypted ID Number',
       CONVERT (NVARCHAR, DECRYPTBYKEYAUTOASYMKEY(AsymKey_ID('SSN_AKey'), NULL, EncryptedNationalIDNumber2)) AS 'Decrypted ID Number'
FROM HumanResources.Employee;
GO