Bagikan melalui


DECRYPTBYKEY (Transact-SQL)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance Azure Synapse Analytics

Fungsi ini menggunakan kunci konten untuk mendekripsi data.

Konvensi sintaks transact-SQL

Catatan

Sintaks ini tidak didukung oleh kumpulan SQL tanpa server di Azure Synapse Analytics.

Untuk kumpulan SQL khusus di Azure Synapse Analytics, penembolokan tataan hasil tidak boleh digunakan bersama dengan DECRYPTBYKEY. Jika fungsi kriptografi ini harus digunakan, pastikan Anda menonaktifkan cache set hasil (baik di tingkat sesi atau tingkat basis data) pada saat eksekusi.

Sintaks

  
DecryptByKey ( { 'ciphertext' | @ciphertext }   
    [ , add_authenticator, { authenticator | @authenticator } ] )  

Argumen

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

@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 (Transact-SQL) 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 (Transact-SQL). authenticator memiliki jenis data sysname .

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

Jenis Kembalian

varbinary, dengan ukuran maksimum 8.000 byte. DECRYPTBYKEY mengembalikan NULL jika kunci konten yang digunakan untuk enkripsi data tidak terbuka atau jika ciphertext adalah NULL.

Keterangan

DECRYPTBYKEY menggunakan kunci konten. Database harus sudah membuka kunci konten ini. DECRYPTBYKEY akan memungkinkan beberapa kunci terbuka secara bersamaan. Anda tidak perlu membuka kunci segera sebelum dekripsi teks sandi.

Enkripsi dan dekripsi konten biasanya beroperasi relatif cepat, dan berfungsi dengan baik untuk operasi yang melibatkan volume data besar.

Panggilan DECRYPTBYKEY harus terjadi dalam konteks database yang berisi kunci enkripsi. Pastikan ini dengan memanggil DECRYPTBYKEY dari objek (seperti tampilan, atau prosedur tersimpan, atau fungsi) yang berada di database.

Izin

Kunci konten harus sudah terbuka dalam sesi saat ini. Lihat OPEN SYMMETRIC KEY (Transact-SQL) untuk informasi selengkapnya.

Contoh

J. Mendekripsi dengan menggunakan kunci konten

Contoh ini mendekripsi ciphertext dengan kunci konten.

-- First, open the symmetric key with which to decrypt the data.  
OPEN SYMMETRIC KEY SSN_Key_01  
   DECRYPTION BY CERTIFICATE HumanResources037;  
GO  
  
-- Now list the original ID, the encrypted ID, and the   
-- decrypted ciphertext. If the decryption worked, the original  
-- and the decrypted ID will match.  
SELECT NationalIDNumber, EncryptedNationalID   
    AS 'Encrypted ID Number',  
    CONVERT(nvarchar, DecryptByKey(EncryptedNationalID))   
    AS 'Decrypted ID Number'  
    FROM HumanResources.Employee;  
GO  

B. Mendekripsi dengan menggunakan kunci konten dan hash autentikasi

Contoh ini mendekripsi data yang awalnya dienkripsi bersama dengan pengautentikasi.

-- First, open the symmetric key with which to decrypt the data  
OPEN SYMMETRIC KEY CreditCards_Key11  
   DECRYPTION BY CERTIFICATE Sales09;  
GO  
  
-- Now list the original card number, the encrypted card number,  
-- and the decrypted ciphertext. If the decryption worked,   
-- the original number will match the decrypted number.  
SELECT CardNumber, CardNumber_Encrypted   
    AS 'Encrypted card number', CONVERT(nvarchar,  
    DecryptByKey(CardNumber_Encrypted, 1 ,   
    HashBytes('SHA1', CONVERT(varbinary, CreditCardID))))   
    AS 'Decrypted card number' FROM Sales.CreditCard;  
GO  
  

C. Gagal mendekripsi ketika tidak dalam konteks database dengan kunci

Contoh berikut menunjukkan bahwa DECRYPTBYKEY harus dijalankan dalam konteks database yang berisi kunci. Baris tidak akan didekripsi ketika DECRYPTBYKEY dijalankan dalam database Master; hasilnya adalah NULL.

-- Create the database
CREATE DATABASE TestingDecryptByKey
GO

USE [TestingDecryptByKey]

-- Create the table and view
CREATE TABLE TestingDecryptByKey.dbo.Test(val VARBINARY(8000) NOT NULL);
GO
CREATE VIEW dbo.TestView AS SELECT CAST(DecryptByKey(val) AS VARCHAR(30)) AS DecryptedVal FROM TestingDecryptByKey.dbo.Test;
GO

-- Create the key, and certificate
USE TestingDecryptByKey;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'ItIsreallyLong1AndSecured!Passsword#';
CREATE CERTIFICATE TestEncryptionCertificate WITH SUBJECT = 'TestEncryption';
CREATE SYMMETRIC KEY TestEncryptSymmmetricKey WITH ALGORITHM = AES_256, IDENTITY_VALUE = 'It is place for test',
KEY_SOURCE = 'It is source for test' ENCRYPTION BY CERTIFICATE TestEncryptionCertificate;

-- Insert rows into the table
DECLARE @var VARBINARY(8000), @Val VARCHAR(30);
SELECT @Val = '000-123-4567';
OPEN SYMMETRIC KEY TestEncryptSymmmetricKey DECRYPTION BY CERTIFICATE TestEncryptionCertificate;
SELECT @var = EncryptByKey(Key_GUID('TestEncryptSymmmetricKey'), @Val);
SELECT CAST(DecryptByKey(@var) AS VARCHAR(30)), @Val;
INSERT INTO dbo.Test VALUES(@var);
GO

-- Switch to master
USE [Master];
GO

-- Results show the date inserted
SELECT DecryptedVal FROM TestingDecryptByKey.dbo.TestView;

-- Results are NULL because we are not in the context of the TestingDecryptByKey Database
SELECT CAST(DecryptByKey(val) AS VARCHAR(30)) AS DecryptedVal FROM TestingDecryptByKey.dbo.Test;
GO

-- Clean up resources
USE TestingDecryptByKey;

DROP SYMMETRIC KEY TestEncryptSymmmetricKey REMOVE PROVIDER KEY;
DROP CERTIFICATE TestEncryptionCertificate;

Use [Master]
DROP DATABASE TestingDecryptByKey;
GO

Lihat Juga

ENCRYPTBYKEY (Transact-SQL)
MEMBUAT KUNCI SIMETRIS (Transact-SQL)
ALTER SYMMETRIC KEY (Transact-SQL)
DROP SYMMETRIC KEY (Transact-SQL)
Hierarki Enkripsi
Pilih Algoritma Enkripsi