Bagikan melalui


DECRYPTBYKEYAUTOASYMKEY (Transact-SQL)

Berlaku untuk: SQL ServerAzure SQL Managed Instance

Fungsi ini mendekripsi data terenkripsi. Ini pertama-tama mendekripsi kunci konten dengan kunci asimetris terpisah, dan kemudian mendekripsi data terenkripsi dengan kunci konten yang diekstrak pada langkah pertama.

Konvensi sintaks transact-SQL

Sintaks

DECRYPTBYKEYAUTOASYMKEY ( akey_ID , akey_password
    , { 'ciphertext' | @ciphertext }
  [ , { add_authenticator | @add_authenticator }
  [ , { authenticator | @authenticator } ] ] )

Argumen

akey_ID

ID kunci asimetris yang digunakan untuk mengenkripsi kunci konten. akey_ID memiliki jenis data int.

akey_password

Kata sandi yang melindungi kunci asimetris. akey_password dapat memiliki NULL nilai jika kunci master database (DMK) melindungi kunci privat asimetris. akey_password memiliki jenis data nvarchar.

Ciphertext

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

@ciphertext

Variabel jenis varbinary yang berisi data yang dienkripsi dengan kunci konten.

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.

@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

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

Izin

Memerlukan izin pada kunci konten, dan VIEW DEFINITION izin pada kunci asimetrisCONTROL.

Contoh

Contoh ini menunjukkan cara DECRYPTBYKEYAUTOASYMKEY 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 ASYMMETRIC KEY SSN_AKey
    WITH ALGORITHM = RSA_2048;
GO

CREATE SYMMETRIC KEY SSN_Key_02
    WITH ALGORITHM = DES
    ENCRYPTION BY ASYMMETRIC KEY SSN_AKey;
GO

--
--Add a column of encrypted data.
ALTER TABLE HumanResources.Employee
    ADD EncryptedNationalIDNumber2 VARBINARY (128);

OPEN SYMMETRIC KEY SSN_Key_02 DECRYPTION BY ASYMMETRIC KEY SSN_AKey;

UPDATE HumanResources.Employee
    SET EncryptedNationalIDNumber2 = EncryptByKey(Key_GUID('SSN_Key_02'), NationalIDNumber);
GO

--Close the key used to encrypt the data.
CLOSE SYMMETRIC KEY SSN_Key_02;
--
--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_02 DECRYPTION BY ASYMMETRIC KEY SSN_AKey;

SELECT NationalIDNumber,
       EncryptedNationalIDNumber2 AS 'Encrypted ID Number',
       CONVERT (NVARCHAR, DecryptByKey(EncryptedNationalIDNumber2)) AS 'Decrypted ID Number'
FROM HumanResources.Employee;

CLOSE SYMMETRIC KEY SSN_Key_02;

--OPTION TWO, using DECRYPTBYKEYAUTOASYMKEY()
SELECT NationalIDNumber,
       EncryptedNationalIDNumber2 AS 'Encrypted ID Number',
       CONVERT (NVARCHAR, DECRYPTBYKEYAUTOASYMKEY(AsymKey_ID('SSN_AKey'), NULL, EncryptedNationalIDNumber2)) AS 'Decrypted ID Number'
FROM HumanResources.Employee;
GO