DECRYPTBYKEYAUTOASYMKEY (Transact-SQL)
Se aplica a: SQL Server Azure SQL Managed Instance
Esta función descifra los datos cifrados. Para ello, en primer lugar descifra una clave simétrica con una clave asimétrica independiente y, después, descifra los datos cifrados con la clave simétrica que se extraen en el primer "paso".
Convenciones de sintaxis de Transact-SQL
Sintaxis
DecryptByKeyAutoAsymKey ( akey_ID , akey_password
, { 'ciphertext' | @ciphertext }
[ , { add_authenticator | @add_authenticator }
[ , { authenticator | @authenticator } ] ] )
Argumentos
akey_ID
Es el identificador de la clave asimétrica que se usa para cifrar la clave simétrica. akey_ID tiene un tipo de datos int.
akey_password
La contraseña que protege la clave asimétrica. akey_password puede tener un valor NULL si la clave maestra de la base de datos protege la clave privada asimétrica. akey_password tiene un tipo de datos nvarchar.
ciphertext Los datos que se cifraron con la clave. ciphertext tiene un tipo de datos varbinary.
@ciphertext
Una variable de tipo varbinary que contiene los datos cifrados con la clave simétrica.
add_authenticator
Indica si el proceso de cifrado original incluía, y cifraba, un autenticador junto con el texto sin formato. Debe coincidir con el valor que se pasa a ENCRYPTBYKEY (Transact-SQL) durante el proceso de cifrado de datos. add_authenticator tiene un valor de 1 si el proceso de cifrado usó un autenticador. add_authenticator tiene un tipo de datos int.
@add_authenticator
Una variable que indica si el proceso de cifrado original incluía, y cifraba, un autenticador junto con el texto sin formato. Debe coincidir con el valor que se pasa a ENCRYPTBYKEY (Transact-SQL) durante el proceso de cifrado de datos. @add_authenticator tiene un tipo de datos int.
authenticator
Los datos que se usaron como base para la generación del autenticador. Debe coincidir con el valor que se proporcionó a ENCRYPTBYKEY (Transact-SQL). autenticador tiene un tipo de datos sysname.
@authenticator
Una variable que contiene datos a partir de los que se genera un autenticador. Debe coincidir con el valor que se proporcionó a ENCRYPTBYKEY (Transact-SQL). @authenticator tiene un tipo de datos sysname.
@add_authenticator
Una variable que indica si el proceso de cifrado original incluía, y cifraba, un autenticador junto con el texto sin formato. Debe coincidir con el valor que se pasa a ENCRYPTBYKEY (Transact-SQL) durante el proceso de cifrado de datos. @add_authenticator tiene un tipo de datos int.
authenticator
Los datos que se usaron como base para la generación del autenticador. Debe coincidir con el valor que se proporcionó a ENCRYPTBYKEY (Transact-SQL). autenticador tiene un tipo de datos sysname.
@authenticator
Una variable que contiene datos a partir de los que se genera un autenticador. Debe coincidir con el valor que se proporcionó a ENCRYPTBYKEY (Transact-SQL). @authenticator tiene un tipo de datos sysname.
Tipos de valor devuelto
varbinary, con un tamaño máximo de 8 000 bytes.
Observaciones
DECRYPTBYKEYAUTOASYMKEY
combina las funciones de OPEN SYMMETRIC KEY
y DECRYPTBYKEY
. En una sola operación, primero descifra una clave simétrica y después la usa para descifrar el texto cifrado.
Permisos
Se requiere el permiso VIEW DEFINITION
en la clave simétrica y el permiso CONTROL
en la clave asimétrica.
Ejemplos
En este ejemplo se muestra cómo DECRYPTBYKEYAUTOASYMKEY
puede simplificar el código de descifrado. Este código se debería ejecutar en una base de datos AdventureWorks2022
que aún no tenga una clave maestra de base de datos.
--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
Vea también
OPEN SYMMETRIC KEY (Transact-SQL)
ENCRYPTBYKEY (Transact-SQL)
DECRYPTBYKEY (Transact-SQL)
Jerarquía de cifrado