Udostępnij za pomocą


DECRYPTBYKEYAUTOCERT (Transact-SQL)

Dotyczy:SQL ServerAzure SQL Managed Instance

Ta funkcja odszyfrowuje dane za pomocą klucza symetrycznego. Ten klucz symetryczny automatycznie odszyfrowuje przy użyciu certyfikatu.

Transact-SQL konwencje składni

Składnia

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

Arguments

cert_ID

Identyfikator certyfikatu używanego do ochrony klucza symetrycznego. cert_ID ma typ danych int .

cert_password

Hasło używane do szyfrowania klucza prywatnego certyfikatu. Może mieć NULL wartość, jeśli klucz główny bazy danych (DMK) chroni klucz prywatny. cert_password ma typ danych nvarchar .

"ciphertext"

Ciąg danych zaszyfrowanych za pomocą klucza. Ciphertext ma typ danych varbinary .

@ciphertext

Zmienna typu varbinary zawierająca dane zaszyfrowane za pomocą klucza.

add_authenticator

Wskazuje, czy oryginalny proces szyfrowania zawiera i zaszyfrowany moduł uwierzytelniania wraz z zwykły tekst. Musi być zgodna z wartością przekazaną do funkcji ENCRYPTBYKEY podczas procesu szyfrowania danych. add_authenticator ma wartość 1, jeśli proces szyfrowania używał wystawcy uwierzytelnienia. add_authenticator ma typ danych int .

@add_authenticator

Zmienna wskazująca, czy oryginalny proces szyfrowania obejmował i zaszyfrował uwierzytelnianie razem z zwykły tekst. Musi być zgodna z wartością przekazaną do funkcji ENCRYPTBYKEY podczas procesu szyfrowania danych. @add_authenticator ma typ danych int .

Wystawca uwierzytelnienia

Dane używane jako podstawa generowania wystawcy uwierzytelnienia. Musi być zgodna z wartością podaną w parametrze ENCRYPTBYKEY. Wystawca authenticator ma typ danych sysname .

@authenticator

Zmienna zawierająca dane, z których generuje wystawca uwierzytelnienia. Musi być zgodna z wartością podaną w parametrze ENCRYPTBYKEY. @authenticator ma typ danych sysname .

Typy zwracane

varbinary o maksymalnym rozmiarze 8000 bajtów.

Uwagi

DECRYPTBYKEYAUTOCERT łączy funkcje i OPEN SYMMETRIC KEYDECRYPTBYKEY. W ramach jednej operacji najpierw odszyfrowuje klucz symetryczny, a następnie odszyfrowuje zaszyfrowany tekst szyfrowania za pomocą tego klucza.

Permissions

Wymaga VIEW DEFINITION uprawnień do klucza symetrycznego i CONTROL uprawnienia do certyfikatu.

Przykłady

W tym przykładzie pokazano, jak DECRYPTBYKEYAUTOCERT uprościć kod odszyfrowywania. Ten kod powinien być uruchamiany w AdventureWorks2025 bazie danych, która nie ma jeszcze zestawu DMK. Zastąp <password> ciąg silnym hasłem.

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