Delen via


DECRYPTBYKEYAUTOCERT (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL Managed Instance

Met deze functie worden gegevens ontsleuteld met een symmetrische sleutel. Deze symmetrische sleutel ontsleutelt automatisch met een certificaat.

Transact-SQL syntaxis-conventies

Syntaxis

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

Arguments

cert_ID

De id van het certificaat dat wordt gebruikt om de symmetrische sleutel te beveiligen. cert_ID heeft een gegevenstype int .

cert_password

Het wachtwoord dat wordt gebruikt om de persoonlijke sleutel van het certificaat te versleutelen. Kan een NULL waarde hebben als de databasehoofdsleutel (DMK) de persoonlijke sleutel beveiligt. cert_password heeft een nvarchar-gegevenstype .

'coderingstekst'

De tekenreeks met gegevens die zijn versleuteld met de sleutel. ciphertext heeft een varbinary-gegevenstype .

@ciphertext

Een variabele van het type varbinary die gegevens bevat die zijn versleuteld met de sleutel.

add_authenticator

Geeft aan of het oorspronkelijke versleutelingsproces is opgenomen en versleuteld, een verificator samen met de tekst zonder opmaak. Moet overeenkomen met de waarde die is doorgegeven aan ENCRYPTBYKEY tijdens het gegevensversleutelingsproces. add_authenticator heeft de waarde 1 als het versleutelingsproces een verificator heeft gebruikt. add_authenticator heeft een gegevenstype int .

@add_authenticator

Een variabele die aangeeft of het oorspronkelijke versleutelingsproces is opgenomen en versleuteld, een verificator samen met de tekst zonder opmaak. Moet overeenkomen met de waarde die is doorgegeven aan ENCRYPTBYKEY tijdens het gegevensversleutelingsproces. @add_authenticator heeft een gegevenstype int .

Verificator

De gegevens die worden gebruikt als basis voor het genereren van de verificator. Moet overeenkomen met de waarde die is opgegeven aan ENCRYPTBYKEY. authenticator heeft een sysname-gegevenstype .

@authenticator

Een variabele met gegevens waaruit een verificator genereert. Moet overeenkomen met de waarde die is opgegeven aan ENCRYPTBYKEY. @authenticator heeft een sysname-gegevenstype .

Retourtypen

varbinary, met een maximale grootte van 8.000 bytes.

Opmerkingen

DECRYPTBYKEYAUTOCERT combineert de functionaliteit van OPEN SYMMETRIC KEY en DECRYPTBYKEY. In één bewerking ontsleutelt deze eerst een symmetrische sleutel en ontsleutelt vervolgens versleutelde coderingstekst met die sleutel.

Permissions

Hiervoor is toestemming vereist VIEW DEFINITION voor de symmetrische sleutel en CONTROL de machtiging voor het certificaat.

Voorbeelden

In dit voorbeeld ziet u hoe DECRYPTBYKEYAUTOCERT u ontsleutelingscode kunt vereenvoudigen. Deze code moet worden uitgevoerd op een AdventureWorks2022 database die nog geen DMK heeft. Vervang <password> door een sterk wachtwoord.

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