Condividi tramite


DECRYPTBYKEYAUTOASYMKEY (Transact-SQL)

Si applica a:SQL ServerIstanza gestita di SQL di Azure

Questa funzione decrittografa i dati crittografati. Prima decrittografa una chiave simmetrica con una chiave asimmetrica separata e quindi decrittografa i dati crittografati con la chiave simmetrica estratta nel primo passaggio.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

akey_ID

ID della chiave asimmetrica usata per crittografare la chiave simmetrica. akey_ID ha un tipo di dati int.

akey_password

Password che protegge la chiave asimmetrica. akey_password può avere un NULL valore se la chiave master del database protegge la chiave privata asimmetrica. akey_password ha un tipo di dati nvarchar.

ciphertext

Dati crittografati con la chiave. ciphertext ha un tipo dati varbinary.

@ciphertext

Variabile di tipo varbinary contenente dati crittografati con la chiave simmetrica.

add_authenticator

Indica se il processo di crittografia originale includeva e crittografava un autenticatore insieme al testo non crittografato. Deve corrispondere al valore passato a ENCRYPTBYKEY durante il processo di crittografia dei dati. add_authenticator ha un valore pari a 1 se il processo di crittografia ha usato un autenticatore. add_authenticator ha un tipo di dati int.

@add_authenticator

Variabile che indica se il processo di crittografia originale includeva e crittografava un autenticatore insieme al testo non crittografato. Deve corrispondere al valore passato a ENCRYPTBYKEY durante il processo di crittografia dei dati. @add_authenticator ha un tipo di dati int.

authenticator

Dati usati come base per la generazione dell'autenticatore. Deve corrispondere al valore fornito a ENCRYPTBYKEY. authenticator ha un tipo di dati sysname.

@authenticator

Variabile contenente i dati dai quali derivare un autenticatore. Deve corrispondere al valore fornito a ENCRYPTBYKEY. @authenticator ha un tipo di dati sysname.

@add_authenticator

Variabile che indica se il processo di crittografia originale includeva e crittografava un autenticatore insieme al testo non crittografato. Deve corrispondere al valore passato a ENCRYPTBYKEY durante il processo di crittografia dei dati. @add_authenticator ha un tipo di dati int.

authenticator

Dati usati come base per la generazione dell'autenticatore. Deve corrispondere al valore fornito a ENCRYPTBYKEY. authenticator ha un tipo di dati sysname.

@authenticator

Variabile contenente i dati dai quali derivare un autenticatore. Deve corrispondere al valore fornito a ENCRYPTBYKEY. @authenticator ha un tipo di dati sysname.

Tipi restituiti

varbinary con un valore massimo di 8.000 byte.

Osservazioni:

DECRYPTBYKEYAUTOASYMKEY consente di combinare le funzionalità sia di OPEN SYMMETRIC KEY che di DECRYPTBYKEY. In un'unica operazione consente prima di decrittografare una chiave simmetrica e quindi di usarla per la decrittografia del testo crittografato.

Autorizzazioni

È richiesta l'autorizzazione VIEW DEFINITION per la chiave simmetrica e l'autorizzazione CONTROL per la chiave asimmetrica.

Esempi

In questo esempio viene illustrato come DECRYPTBYKEYAUTOASYMKEY consente di semplificare il codice di decrittografia. Questo codice deve essere eseguito in un AdventureWorks2025 database che non dispone già di una DMK. Sostituire <password> con una password complessa.

--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