ENCRYPTBYKEY (Transact-SQL)
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance Azure Synapse Analytics
Mengenkripsi data dengan menggunakan kunci konten.
Catatan
Sintaks ini tidak didukung oleh kumpulan SQL tanpa server di Azure Synapse Analytics.
Sintaks
EncryptByKey ( key_GUID , { 'cleartext' | @cleartext }
[, { add_authenticator | @add_authenticator }
, { authenticator | @authenticator } ] )
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.
Serangan substitusi seluruh 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)