Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL database di Microsoft Fabric
Fungsi ini menggunakan kunci konten untuk mendekripsi data.
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 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 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 adalah sysname.
@authenticator
Variabel yang berisi data dari mana pengautentikasi dihasilkan. Harus cocok dengan nilai yang disediakan ke ENCRYPTBYKEY. @authenticator adalah sysname.
Tipe pengembalian
varbinary, dengan ukuran maksimum 8.000 byte.
DECRYPTBYKEY
NULL mengembalikan 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 memungkinkan beberapa kunci terbuka secara bersamaan. Anda tidak perlu membuka kunci segera sebelum dekripsi teks sandi.
Enkripsi dan dekripsi simetris biasanya beroperasi dengan 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. Untuk informasi selengkapnya, lihat KUNCI SIMETRIS TERBUKA.
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;
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 didekripsi saat DECRYPTBYKEY dijalankan dalam master database; 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!Password#';
CREATE CERTIFICATE TestEncryptionCertificate
WITH SUBJECT = 'TestEncryption';
CREATE SYMMETRIC KEY TestEncryptSymmetricKey
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 AS VARBINARY (8000), @Val AS VARCHAR (30);
SELECT @Val = '000-123-4567';
OPEN SYMMETRIC KEY TestEncryptSymmetricKey DECRYPTION BY CERTIFICATE TestEncryptionCertificate;
SELECT @var = EncryptByKey(Key_GUID('TestEncryptSymmetricKey'), @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 TestEncryptSymmetricKey REMOVE PROVIDER KEY;
DROP CERTIFICATE TestEncryptionCertificate;
USE [master];
DROP DATABASE TestingDecryptByKey;
GO