DECRYPTBYKEYAUTOASYMKEY (Transact-SQL)
Si applica a: SQL Server Istanza gestita di SQL di Azure
Questa funzione decrittografa i dati crittografati. A tale scopo, per prima cosa 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 } ] ] )
Nota
Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere Documentazione delle versioni precedenti.
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 valore NULL 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 (Transact-SQL) 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 (Transact-SQL) 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 specificato per ENCRYPTBYKEY (Transact-SQL). authenticator ha un tipo di dati sysname.
@authenticator
Variabile contenente i dati dai quali derivare un autenticatore. Deve corrispondere al valore specificato per ENCRYPTBYKEY (Transact-SQL). @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 (Transact-SQL) 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 specificato per ENCRYPTBYKEY (Transact-SQL). authenticator ha un tipo di dati sysname.
@authenticator
Variabile contenente i dati dai quali derivare un autenticatore. Deve corrispondere al valore specificato per ENCRYPTBYKEY (Transact-SQL). @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 database AdventureWorks2022
per cui non è già presente una chiave master.
--Create the keys and certificate.
USE AdventureWorks2022;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'mzkvdMlk979438teag$$ds987yghn)(*&4fdg^';
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'mzkvdMlk979438teag$$ds987yghn)(*&4fdg^';
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
Vedi anche
OPEN SYMMETRIC KEY (Transact-SQL)
ENCRYPTBYKEY (Transact-SQL)
DECRYPTBYKEY (Transact-SQL)
Gerarchia di crittografia