Dela via


DECRYPTBYKEYAUTOCERT (Transact-SQL)

gäller för:SQL ServerAzure SQL Managed Instance

Den här funktionen dekrypterar data med en symmetrisk nyckel. Den symmetriska nyckeln dekrypterar automatiskt med ett certifikat.

Transact-SQL syntaxkonventioner

Syntax

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

Arguments

cert_ID

ID:t för certifikatet som används för att skydda den symmetriska nyckeln. cert_ID har en int-datatyp .

cert_password

Lösenordet som används för att kryptera certifikatets privata nyckel. Kan ha ett NULL värde om databasens huvudnyckel (DMK) skyddar den privata nyckeln. cert_password har en nvarchar-datatyp .

"chiffertext"

Datasträngen som krypteras med nyckeln. chiffertext har en varbinär datatyp.

@ciphertext

En variabel av typen varbinary som innehåller data som krypterats med nyckeln.

add_authenticator

Anger om den ursprungliga krypteringsprocessen inkluderade och krypterade en autentisering tillsammans med klartext. Måste matcha värdet som skickades till ENCRYPTBYKEY under datakrypteringsprocessen. add_authenticator har värdet 1 om krypteringsprocessen använde en autentisering. add_authenticator har en int-datatyp .

@add_authenticator

En variabel som anger om den ursprungliga krypteringsprocessen inkluderade och krypterade en autentisering tillsammans med klartext. Måste matcha värdet som skickades till ENCRYPTBYKEY under datakrypteringsprocessen. @add_authenticator har en int-datatyp .

autentiserare

De data som används som grund för autentiseringsgenereringen. Måste matcha värdet som anges till ENCRYPTBYKEY. authenticator har en datatyp för sysname .

@authenticator

En variabel som innehåller data som en autentiseringsutent genererar från. Måste matcha värdet som anges till ENCRYPTBYKEY. @authenticator har datatypen sysname .

Returtyper

varbinary, med en maximal storlek på 8 000 byte.

Anmärkningar

DECRYPTBYKEYAUTOCERT kombinerar funktionerna OPEN SYMMETRIC KEY i och DECRYPTBYKEY. I en enda åtgärd dekrypterar den först en symmetrisk nyckel och dekrypterar sedan krypterad chiffertext med den nyckeln.

Permissions

Kräver VIEW DEFINITION behörighet för den symmetriska nyckeln och CONTROL behörighet för certifikatet.

Examples

Det här exemplet visar hur DECRYPTBYKEYAUTOCERT du kan förenkla dekrypteringskoden. Den här koden ska köras på en AdventureWorks2022 databas som inte redan har en DMK. Ersätt <password> med ett starkt lösenord.

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