Tutorial: Membuat dan menggunakan indeks pada kolom yang diaktifkan enklave menggunakan enkripsi acak

Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru - Hanya Windows Azure SQL Database

Tutorial ini mengajarkan Anda cara membuat dan menggunakan indeks pada kolom yang diaktifkan enklave menggunakan enkripsi acak yang didukung di Always Encrypted dengan enklave aman. Ini akan menunjukkan kepada Anda:

  • Cara membuat indeks saat Anda memiliki akses ke kunci (kunci master kolom dan kunci enkripsi kolom) yang melindungi kolom.
  • Cara membuat indeks saat Anda tidak memiliki akses ke kunci yang melindungi kolom.

Prasyarat

Unduh versi terbaru SQL Server Management Studio (SSMS).

Pastikan Anda telah menyelesaikan salah satu tutorial Memulai menggunakan Always Encrypted dengan enklave aman sebelum mengikuti langkah-langkah di bawah ini dalam tutorial ini.

Langkah 1: Aktifkan Pemulihan Database Dipercepat (ADR) di database Anda

Catatan

Langkah ini hanya berlaku untuk SQL Server. Jika Anda menggunakan Azure SQL Database, lewati langkah ini. ADR diaktifkan secara otomatis di Azure SQL Database dan menonaktifkannya tidak didukung.

Microsoft sangat menyarankan Anda mengaktifkan ADR dalam database Anda sebelum membuat indeks pertama pada kolom berkemampuan enklave menggunakan enkripsi acak. Lihat bagian Pemulihan Database di Always Encrypted dengan enklave aman.

  1. Tutup instans SSMS apa pun yang Anda gunakan di tutorial sebelumnya. Menutup SQL Server Management Studio akan menutup koneksi database yang telah Anda buka, yang diperlukan untuk mengaktifkan ADR.

  2. Buka instans baru SSMS dan sambungkan ke instans SQL Server Anda sebagai sysadmin tanpa Always Encrypted diaktifkan untuk koneksi database.

    1. Mulai SQL Server Management Studio.
    2. Dalam dialog Sambungkan ke Server, tentukan nama server Anda, pilih metode autentikasi, dan tentukan kredensial Anda.
    3. Pilih Opsi >> dan pilih tab Always Encrypted .
    4. Pastikan kotak centang Aktifkan Always Encrypted (enkripsi kolom)tidak dipilih.
    5. Pilih Sambungkan.
  3. Buka jendela kueri baru dan jalankan pernyataan di bawah ini untuk mengaktifkan ADR.

    ALTER DATABASE ContosoHR SET ACCELERATED_DATABASE_RECOVERY = ON;
    

Langkah 2: Membuat dan menguji indeks tanpa pemisahan peran

Dalam langkah ini, Anda akan membuat dan menguji indeks pada kolom terenkripsi. Anda akan bertindak sebagai satu pengguna yang berasumsi peran DBA, yang mengelola database, dan pemilik data yang memiliki akses ke kunci, melindungi data.

  1. Buka instans SQL Server baru dan sambungkan ke instans SQL Server Anda dengan Always Encrypted diaktifkan untuk koneksi database.

    1. Mulai SSMS instans baru.
    2. Dalam dialog Sambungkan ke Server, tentukan nama server Anda, pilih metode autentikasi, dan tentukan kredensial Anda.
    3. Pilih Opsi >> dan pilih tab Always Encrypted .
    4. Pilih kotak centang Aktifkan Always Encrypted (enkripsi kolom) dan Aktifkan Enklave Aman
    5. Jika Anda menggunakan pengesahan untuk database Anda, pilih nilai Protokol Pengesahan Enklave yang mewakili layanan pengesahan Anda (Layanan Wali Host atau Microsoft Azure Attestation) dan isi URL pengesahan enklave. Jika tidak, pilih Tidak Ada.
    6. Pilih Sambungkan.
    7. Jika diminta untuk mengaktifkan parameterisasi untuk kueri Always Encrypted, pilih Aktifkan.
  2. Jika Anda tidak diminta untuk mengaktifkan Parameterisasi untuk Always Encrypted, verifikasi bahwa parameter diaktifkan.

    1. Pilih Alat dari menu utama SSMS.
    2. Pilih Opsi....
    3. Navigasi ke Kueri Eksekusi>SQL Server>Tingkat Lanjut.
    4. Pastikan bahwa Aktifkan Parameterisasi untuk Always Encrypted dicentang.
    5. PilihOK.
  3. Buka jendela kueri dan jalankan pernyataan di bawah ini untuk mengenkripsi kolom LastName dalam tabel Karyawan . Anda akan membuat dan menggunakan indeks pada kolom tersebut di langkah selanjutnya.

    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [LastName] [nvarchar](50) COLLATE Latin1_General_BIN2 
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL;
    GO   
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    GO
    
  4. Buat indeks pada kolom LastName . Karena Anda tersambung ke database dengan Always Encrypted diaktifkan, driver klien di dalam SQL Server Management Studio secara transparan menyediakan CEK1 (kunci enkripsi kolom, melindungi kolom LastName ) ke enklave, yang diperlukan untuk membuat indeks.

    CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName])
    INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]);
    GO
    
  5. Jalankan kueri kaya pada kolom LastName dan verifikasi SQL Server menggunakan indeks saat menjalankan kueri.

    1. Di jendela kueri yang sama atau baru, pastikan tombol Sertakan Statistik Kueri Langsung pada toolbar aktif.

    2. Jalankan kueri di bawah ini.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
    3. Di tab Statistik Kueri Langsung, amati bahwa kueri menggunakan indeks.

Langkah 3: Membuat indeks dengan pemisahan peran

Dalam langkah ini, Anda akan membuat indeks pada kolom terenkripsi, berpura-pura menjadi dua pengguna yang berbeda. Satu pengguna adalah DBA, yang perlu membuat indeks, tetapi tidak memiliki akses ke kunci. Pengguna lain adalah pemilik data, yang memiliki akses ke kunci.

  1. Menggunakan instans SSMS tanpa Always Encrypted diaktifkan, jalankan pernyataan di bawah ini untuk menghilangkan indeks pada kolom LastName .

    DROP INDEX IX_LastName ON [HR].[Employees]; 
    GO
    
  2. Bertindak sebagai pemilik data (atau aplikasi yang memiliki akses ke kunci), isi cache di dalam enklave dengan CEK1.

    Catatan

    Kecuali Anda telah memulai ulang instans SQL Server setelah Langkah 2: Buat dan uji indeks tanpa pemisahan peran, langkah ini berlebihan karena CEK1 sudah ada di cache. Kami telah menambahkannya untuk menunjukkan bagaimana pemilik data dapat memberikan kunci ke enklave, jika belum ada di enklave.

    1. Dalam instans SSMS dengan Always Encrypted diaktifkan, jalankan pernyataan di bawah ini di jendela kueri. Pernyataan mengirimkan semua kunci enkripsi kolom yang diaktifkan enklave ke enklave. Lihat sp_enclave_send_keys untuk detailnya.

      EXEC sp_enclave_send_keys;
      GO
      
    2. Sebagai alternatif untuk menjalankan prosedur tersimpan di atas, Anda dapat menjalankan kueri DML yang menggunakan enklave terhadap kolom LastName . Ini akan mengisi enklave hanya dengan CEK1.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
  3. Bertindak sebagai DBA, buat indeks.

    1. Dalam instans SSMS tanpa Always Encrypted diaktifkan, jalankan pernyataan di bawah ini di jendela kueri.

      CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName])
      INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]);
      GO
      
  4. Sebagai pemilik data, jalankan kueri kaya pada kolom LastName dan verifikasi SQL Server menggunakan indeks saat menjalankan kueri.

    1. Dalam instans SSMS dengan Always Encrypted diaktifkan, pilih jendela kueri yang sudah ada atau buka jendela kueri baru, dan pastikan tombol Sertakan Statistik Kueri Langsung pada toolbar aktif.

    2. Jalankan kueri di bawah ini.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
    3. Dalam Statistik Kueri Langsung, amati bahwa kueri menggunakan indeks.

Langkah berikutnya

Baca juga