Sdílet prostřednictvím


DECRYPTBYKEYAUTOCERT (Transact-SQL)

platí pro:SQL Serverazure SQL Managed Instance

Tato funkce dešifruje data symetrickým klíčem. Tento symetrický klíč automaticky dešifruje certifikátem.

Transact-SQL konvence syntaxe

Syntaxe

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

Arguments

cert_ID

ID certifikátu použitého k ochraně symetrického klíče. cert_ID má datový typ int .

cert_password

Heslo použité k šifrování privátního klíče certifikátu. Pokud hlavní klíč databáze (DMK) chrání privátní klíč, může mít NULL hodnotu. cert_password má datový typ nvarchar .

Šifrový text

Řetězec dat zašifrovaný klíčem. šiferný textvarbinární datový typ.

@ciphertext

Proměnná typu varbinary obsahující data zašifrovaná klíčem.

add_authenticator

Určuje, jestli byl původní proces šifrování zahrnutý a zašifrovaný ověřovací objekt společně s prostým textem. Musí odpovídat hodnotě předané šifrovacímu klíči ENCRYPTBYKEY během procesu šifrování dat. add_authenticator má hodnotu 1, pokud proces šifrování použil ověřovací program. add_authenticator má datový typ int .

@add_authenticator

Proměnná označující, jestli byl původní proces šifrování zahrnutý a zašifrovaný, ověřovací objekt společně s prostým textem. Musí odpovídat hodnotě předané šifrovacímu klíči ENCRYPTBYKEY během procesu šifrování dat. @add_authenticator má datový typ int .

autentikátor

Data používaná jako základ pro generování ověřovacího objektu. Musí odpovídat hodnotě zadané pro ENCRYPTBYKEY. authenticator má datový typ sysname .

@authenticator

Proměnná obsahující data, ze kterých se generuje ověřovací objekt. Musí odpovídat hodnotě zadané pro ENCRYPTBYKEY. @authenticator má datový typ sysname .

Návratové typy

varbinary, s maximální velikostí 8 000 bajtů.

Poznámky

DECRYPTBYKEYAUTOCERT kombinuje funkce OPEN SYMMETRIC KEY a DECRYPTBYKEY. V jedné operaci nejprve dešifruje symetrický klíč a pak dešifruje šifrovaný šifrovaný text s tímto klíčem.

Povolení

Vyžaduje VIEW DEFINITION oprávnění pro symetrický klíč a CONTROL oprávnění k certifikátu.

Examples

Tento příklad ukazuje, jak DECRYPTBYKEYAUTOCERT zjednodušit dešifrovací kód. Tento kód by se měl spustit v AdventureWorks2025 databázi, která ještě nemá sadu DMK. Nahraďte <password> silným heslem.

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