Membuat dan menggunakan indeks pada kolom menggunakan Always Encrypted dengan enklave aman
Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru - Hanya Windows Azure SQL Database
Artikel ini menjelaskan cara membuat dan menggunakan indeks pada kolom yang dienkripsi menggunakan kunci enkripsi kolom berkemampuan enklave dengan Always Encrypted dengan enklave aman.
Always Encrypted dengan enklave aman mendukung:
- Indeks terkluster dan non-kluster pada kolom yang dienkripsi menggunakan enkripsi deterministik dan kunci yang diaktifkan enklave.
- Indeks tersebut diurutkan berdasarkan ciphertext. Tidak ada pertimbangan khusus yang berlaku untuk indeks tersebut. Anda dapat mengelola dan menggunakannya dengan cara yang sama seperti indeks pada kolom yang dienkripsi menggunakan enkripsi deterministik dan kunci yang tidak diaktifkan enklave (seperti halnya Always Encrypted).
- Indeks non-kluster pada kolom yang dienkripsi menggunakan enkripsi acak dan kunci berkemampuan enklave.
- Nilai kunci dalam struktur data indeks (pohon B) dienkripsi dan diurutkan berdasarkan nilai teks biasanya. Untuk informasi selengkapnya, lihat Indeks pada kolom yang diaktifkan enklave.
Catatan
Sisa artikel ini membahas indeks non-kluster pada kolom yang dienkripsi menggunakan enkripsi acak dan kunci berkemampuan enklave.
Karena indeks pada kolom menggunakan enkripsi acak dan kunci enkripsi kolom yang diaktifkan enklave berisi data terenkripsi (ciphertext) yang diurutkan berdasarkan teks biasa, Mesin SQL Server harus menggunakan enklave untuk operasi apa pun yang melibatkan pembuatan, pembaruan, atau pencarian indeks, termasuk:
- Membuat atau membangun ulang indeks.
- Menyisipkan, memperbarui, atau menghapus baris dalam tabel (berisi kolom terindeks/terenkripsi), yang memicu penyisipan dan/atau menghapus kunci indeks ke/dari indeks.
- Menjalankan
DBCC
perintah yang melibatkan pemeriksaan integritas indeks, misalnya DBCC CHECKDB (Transact-SQL) atau DBCC CHECKTABLE (Transact-SQL). - Pemulihan database (misalnya, setelah SQL Server gagal dan dimulai ulang), jika SQL Server perlu membatalkan perubahan apa pun pada indeks (detail selengkapnya di bawah).
Semua operasi di atas mengharuskan enklave memiliki kunci enkripsi kolom untuk kolom terindeks. Kunci diperlukan untuk mendekripsi kunci indeks. Secara umum, enklave dapat memperoleh kunci enkripsi kolom dengan salah satu dari dua cara:
- Langsung dari aplikasi klien.
- Dari cache kunci enkripsi kolom.
Memanggil operasi pengindeksan dengan kunci enkripsi kolom yang disediakan langsung oleh klien
Agar metode ini untuk memanggil operasi pengindeksan agar berfungsi, aplikasi (termasuk alat, seperti SQL Server Management Studio (SSMS)) mengeluarkan kueri yang memicu operasi pada indeks harus:
- Sambungkan ke database dengan komputasi Always Encrypted dan enklave diaktifkan untuk koneksi database.
- Aplikasi harus memiliki akses ke kunci master kolom yang melindungi kunci enkripsi kolom untuk kolom terindeks.
Setelah Mesin SQL Server menguraikan kueri aplikasi dan menentukan perlu memperbarui indeks pada kolom terenkripsi untuk menjalankan kueri, SQL Server Engine menginstruksikan driver klien untuk merilis kunci enkripsi kolom yang diperlukan ke enklave melalui saluran aman. Ini adalah mekanisme yang sama persis yang digunakan untuk menyediakan enklave dengan kunci enkripsi kolom untuk memproses kueri lain yang tidak menggunakan indeks. Misalnya, enkripsi atau kueri di tempat menggunakan pencocokan pola dan perbandingan rentang.
Metode ini berguna untuk memastikan keberadaan indeks pada kolom terenkripsi transparan terhadap aplikasi yang sudah terhubung ke database dengan komputasi Always Encrypted dan enklave diaktifkan. Koneksi aplikasi dapat menggunakan enklave untuk pemrosesan kueri. Setelah Anda membuat indeks pada kolom, driver di dalam aplikasi Anda akan secara transparan menyediakan kunci enkripsi kolom ke enklave untuk operasi pengindeksan. Membuat indeks dapat meningkatkan jumlah kueri yang mengharuskan aplikasi mengirim kunci enkripsi kolom ke enklave.
Untuk menggunakan metode ini, ikuti panduan umum untuk menjalankan pernyataan menggunakan enklave aman di - Jalankan pernyataan Transact-SQL menggunakan enklave aman.
Untuk instruksi langkah demi langkah tentang cara menggunakan metode ini, lihat Tutorial: Membuat dan menggunakan indeks pada kolom berkemampuan enklave menggunakan enkripsi acak.
Memanggil operasi pengindeksan menggunakan kunci enkripsi kolom yang di-cache
Setelah aplikasi klien mengirim kunci enkripsi kolom ke enklave untuk memproses kueri apa pun yang memerlukan komputasi enklave, enklave menyimpan kunci enkripsi kolom dalam cache internal. Cache ini terletak di dalam enklave dan tidak dapat diakses dari luar.
Jika aplikasi klien yang sama atau lain yang digunakan oleh pengguna yang sama atau berbeda memicu operasi pada indeks tanpa menyediakan enkripsi kolom yang diperlukan secara langsung, enklave akan mencari kunci enkripsi kolom di cache. Akibatnya, operasi pada indeks berhasil, meskipun aplikasi klien belum memberikan kunci.
Agar metode ini memanggil operasi pengindeksan agar berfungsi, aplikasi harus terhubung ke database tanpa Always Encrypted diaktifkan untuk koneksi dan kunci enkripsi kolom yang diperlukan harus tersedia di cache di dalam enklave.
Metode operasi pemanggilan ini hanya didukung untuk kueri yang tidak memerlukan kunci enkripsi kolom untuk operasi lain, tidak terkait dengan indeks. Misalnya, aplikasi yang menyisipkan baris menggunakan INSERT
pernyataan ke tabel yang berisi kolom terenkripsi, diperlukan untuk menyambungkan ke database dengan Always Encrypted diaktifkan di string koneksi dan harus memiliki akses ke kunci, terlepas dari apakah kolom terenkripsi memiliki indeks atau tidak.
Metode ini berguna untuk:
Pastikan keberadaan indeks pada kolom yang diaktifkan enklave menggunakan enkripsi acak transparan bagi aplikasi dan pengguna yang tidak memiliki akses ke kunci dan data dalam teks biasa.
Ini memastikan pembuatan indeks pada kolom terenkripsi tidak mengerem kueri yang ada. Jika aplikasi mengeluarkan kueri pada tabel yang berisi kolom terenkripsi tanpa harus memiliki akses ke kunci, aplikasi dapat terus berjalan tanpa memiliki akses ke kunci setelah DBA membuat indeks. Misalnya, pertimbangkan aplikasi yang menjalankan kueri di bawah ini pada tabel Karyawan yang berisi kolom terenkripsi. DBA belum membuat indeks pada kolom terenkripsi apa pun.
DELETE FROM [dbo].[Employees] WHERE [EmployeeID] = 1; GO
Jika aplikasi mengirimkan kueri melalui koneksi tanpa komputasi Always Encrypted dan enklave diaktifkan, kueri akan berhasil. Kueri tidak memicu komputasi apa pun pada kolom terenkripsi. Setelah DBA membuat indeks pada kolom terenkripsi apa pun, kueri memicu penghapusan kunci indeks dari indeks. Enklave membutuhkan kunci enkripsi kolom dalam situasi ini. Namun, aplikasi akan dapat terus menjalankan kueri ini melalui koneksi yang sama, selama pemilik data telah memasok kunci enkripsi kolom ke enklave.
Untuk mencapai pemisahan peran saat mengelola indeks, karena memungkinkan DBA untuk membuat dan mengubah indeks pada kolom terenkripsi, tanpa memiliki akses ke data sensitif.
Tip
sp_enclave_send_keys (Transact-SQL) memungkinkan Anda untuk dengan mudah mengirim semua kunci enkripsi kolom berkemampuan enklave yang digunakan untuk indeks ke enklave, dan mengisi cache kunci.
Untuk instruksi langkah demi langkah tentang cara menggunakan metode ini, lihat Tutorial: Membuat dan menggunakan indeks pada kolom berkemampuan enklave menggunakan enkripsi acak.