Bagikan melalui


DECRYPTBYKEYAUTOCERT (Transact-SQL)

Berlaku untuk: SQL ServerAzure SQL Managed Instance

Fungsi ini mendekripsi data dengan kunci konten. Kunci konten tersebut secara otomatis mendekripsi dengan sertifikat.

Konvensi sintaks transact-SQL

Sintaks

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

Argumen

cert_ID

ID sertifikat yang digunakan untuk melindungi kunci konten. cert_ID memiliki jenis data int.

cert_password

Kata sandi yang digunakan untuk mengenkripsi kunci privat sertifikat. Dapat memiliki NULL nilai jika kunci master database (DMK) melindungi kunci privat. cert_password memiliki jenis data nvarchar.

'ciphertext'

String data yang dienkripsi dengan kunci. ciphertext memiliki jenis data varbinary .

@ciphertext

Variabel jenis varbinary yang berisi data yang dienkripsi dengan kunci.

add_authenticator

Menunjukkan apakah proses enkripsi asli disertakan, dan dienkripsi, pengautentikasi bersama dengan teks biasa. Harus sesuai dengan nilai yang diteruskan ke ENCRYPTBYKEY selama proses enkripsi data. add_authenticator memiliki nilai 1 jika proses enkripsi menggunakan pengautentikasi. add_authenticator memiliki jenis data int.

@add_authenticator

Variabel yang menunjukkan apakah proses enkripsi asli disertakan, dan dienkripsi, pengautentikasi bersama dengan teks biasa. Harus sesuai dengan nilai yang diteruskan ke ENCRYPTBYKEY selama proses enkripsi data. @add_authenticator memiliki jenis data int.

Authenticator

Data yang digunakan sebagai dasar untuk pembuatan pengautentikasi. Harus cocok dengan nilai yang disediakan ke ENCRYPTBYKEY. authenticator memiliki jenis data sysname .

@authenticator

Variabel yang berisi data dari mana pengautentikasi dihasilkan. Harus cocok dengan nilai yang disediakan ke ENCRYPTBYKEY. @authenticator memiliki jenis data sysname.

Tipe pengembalian

varbinary, dengan ukuran maksimum 8.000 byte.

Keterangan

DECRYPTBYKEYAUTOCERT menggabungkan fungsionalitas dan OPEN SYMMETRIC KEYDECRYPTBYKEY. Dalam satu operasi, pertama-tama mendekripsi kunci konten, dan kemudian mendekripsi ciphertext terenkripsi dengan kunci tersebut.

Izin

VIEW DEFINITION Memerlukan izin pada kunci konten, dan CONTROL izin pada sertifikat.

Contoh

Contoh ini menunjukkan cara DECRYPTBYKEYAUTOCERT menyederhanakan kode dekripsi. Kode ini harus berjalan pada AdventureWorks2025 database yang belum memiliki DMK. Ganti <password> dengan kata sandi yang kuat.

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