ENCRYPTBYKEY (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Mengenkripsi data dengan menggunakan kunci konten.

Konvensi sintaks transact-SQL

Catatan

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

Sintaksis

  
EncryptByKey ( key_GUID , { 'cleartext' | @cleartext }  
    [, { add_authenticator | @add_authenticator }  
     , { authenticator | @authenticator } ] )  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

key_GUID
Adalah GUID kunci yang akan digunakan untuk mengenkripsi cleartext. pengidentifikasi unik.

'cleartext'
Adalah data yang akan dienkripsi dengan kunci.

@cleartext
Adalah variabel jenis nvarchar, char, varchar, binary, varbinary, atau nchar yang berisi data yang akan dienkripsi dengan kunci.

add_authenticator
Menunjukkan apakah pengautentikasi akan dienkripsi bersama dengan cleartext. Harus 1 saat menggunakan pengautentikasi. int.

@add_authenticator
Menunjukkan apakah pengautentikasi akan dienkripsi bersama dengan cleartext. Harus 1 saat menggunakan pengautentikasi. int.

Authenticator
Adalah data untuk memperoleh pengautentikasi. sysname.

@authenticator
Adalah variabel yang berisi data untuk memperoleh pengautentikasi.

Jenis Kembalian

varbinary dengan ukuran maksimum 8.000 byte.

Mengembalikan NULL jika kunci tidak terbuka, jika kunci tidak ada, atau jika kunci adalah kunci RC4 yang tidak digunakan lagi dan database tidak berada dalam tingkat kompatibilitas 110 atau lebih tinggi.

Mengembalikan NULL jika nilai cleartext adalah NULL.

Keterangan

EncryptByKey menggunakan kunci konten. Kunci ini harus terbuka. Jika kunci konten sudah terbuka dalam sesi saat ini, Anda tidak perlu membukanya lagi dalam konteks kueri.

Pengautentikasi membantu Anda mencegah penggantian seluruh nilai bidang terenkripsi. Misalnya, pertimbangkan tabel data penggajian berikut.

Employee_ID Standard_Title Base_Pay
345 Asisten Ruang Salin Fskj%7^edhn00
697 Kepala Bagian Keuangan M0x8900f56543
694 Pengawas Entri Data Cvc97824%^34f

Tanpa merusak enkripsi, pengguna berbahaya dapat menyimpulkan informasi signifikan dari konteks di mana ciphertext disimpan. Karena Chief Financial Officer dibayar lebih dari Asisten Ruang Salin, nilai yang dienkripsi sebagai M0x8900f56543 harus lebih besar dari nilai yang dienkripsi sebagai Fskj%7^edhn00. Jika demikian, setiap pengguna dengan izin UBAH pada tabel dapat memberi Asisten Ruang Salin kenaikan gaji dengan mengganti data di bidang Base_Pay dengan salinan data yang disimpan di bidang Base_Pay Chief Financial Officer. Serangan substitusi seluruh nilai ini melewati enkripsi sama sekali.

Siapa serang substitusi nilai dapat digagalkan dengan menambahkan informasi kontekstual ke teks biasa sebelum mengenkripsinya. Informasi kontekstual ini digunakan untuk memverifikasi bahwa data teks biasa belum dipindahkan.

Jika parameter pengautentikasi ditentukan saat data dienkripsi, pengautentikasi yang sama diperlukan untuk mendekripsi data dengan menggunakan DecryptByKey. Pada waktu enkripsi, hash pengautentikasi dienkripsi bersama dengan teks biasa. Pada waktu dekripsi, pengautentikasi yang sama harus diteruskan ke DecryptByKey. Jika keduanya tidak cocok, dekripsi akan gagal. Ini menunjukkan bahwa nilai telah dipindahkan sejak dienkripsi. Sebaiknya gunakan kolom yang berisi nilai unik dan tidak berubah sebagai pengautentikasi. Jika nilai pengautentikasi berubah, Anda mungkin kehilangan akses ke data.

Enkripsi dan dekripsi konten relatif cepat, dan cocok untuk bekerja dengan data dalam jumlah besar.

Penting

Menggunakan fungsi enkripsi SQL Server bersama dengan pengaturan ANSI_PADDING OFF dapat menyebabkan kehilangan data karena konversi implisit. Untuk informasi selengkapnya tentang ANSI_PADDING, lihat SET ANSI_PADDING (Transact-SQL).

Contoh

Fungsionalitas yang diilustrasikan dalam contoh berikut bergantung pada kunci dan sertifikat yang dibuat di Cara: Mengenkripsi Kolom Data.

J. Mengenkripsi string dengan kunci konten

Contoh berikut menambahkan kolom ke Employee tabel, lalu mengenkripsi nilai nomor Jaminan Sosial yang disimpan dalam kolom NationalIDNumber.

USE AdventureWorks2022;  
GO  
  
-- Create a column in which to store the encrypted data.  
ALTER TABLE HumanResources.Employee  
    ADD EncryptedNationalIDNumber varbinary(128);   
GO  
  
-- Open the symmetric key with which to encrypt the data.  
OPEN SYMMETRIC KEY SSN_Key_01  
   DECRYPTION BY CERTIFICATE HumanResources037;  
  
-- Encrypt the value in column NationalIDNumber with symmetric key  
-- SSN_Key_01. Save the result in column EncryptedNationalIDNumber.  
UPDATE HumanResources.Employee  
SET EncryptedNationalIDNumber  
    = EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);  
GO  

B. Mengenkripsi rekaman bersama dengan nilai autentikasi

USE AdventureWorks2022;  
  
-- Create a column in which to store the encrypted data.  
ALTER TABLE Sales.CreditCard   
    ADD CardNumber_Encrypted varbinary(128);   
GO  
  
-- Open the symmetric key with which to encrypt the data.  
OPEN SYMMETRIC KEY CreditCards_Key11  
    DECRYPTION BY CERTIFICATE Sales09;  
  
-- Encrypt the value in column CardNumber with symmetric   
-- key CreditCards_Key11.  
-- Save the result in column CardNumber_Encrypted.    
UPDATE Sales.CreditCard  
SET CardNumber_Encrypted = EncryptByKey(Key_GUID('CreditCards_Key11'),   
    CardNumber, 1, CONVERT( varbinary, CreditCardID) );  
GO  

Lihat Juga

DECRYPTBYKEY (Transact-SQL)
MEMBUAT KUNCI SIMETRIS (Transact-SQL)
ALTER SYMMETRIC KEY (Transact-SQL)
DROP SYMMETRIC KEY (Transact-SQL)
Hierarki Enkripsi
HASHBYTE (Transact-SQL)