Tutorial: Mulai menggunakan Always Encrypted dengan enklave aman di SQL Server

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

Tutorial ini mengajarkan Anda cara memulai Always Encrypted dengan enklave aman di SQL Server. Ini akan menunjukkan kepada Anda:

  • Cara membuat lingkungan dasar untuk menguji dan mengevaluasi Always Encrypted dengan enklave aman tanpa pengesahan yang dikonfigurasi untuk enklave.
  • Cara mengenkripsi data di tempat dan mengeluarkan kueri rahasia yang kaya terhadap kolom terenkripsi menggunakan SQL Server Management Studio (SSMS).

Jika Anda ingin mempelajari cara menyiapkan Always Encrypted dengan enklave aman menggunakan Host Guardian Service untuk pengesahan enklave, lihat Tutorial: Mulai menggunakan Always Encrypted dengan enklave aman di SQL Server dengan pengesahan menggunakan HGS

Prasyarat

Komputer yang menghosting instans SQL Server Anda (disebut sebagai komputer SQL Server) perlu memenuhi persyaratan berikut:

  • SQL Server 2019 (15.x) atau yang lebih baru.
  • Windows 10 atau yang lebih baru, Windows Server 2019 atau yang lebih baru.
  • Dukungan CPU untuk teknologi virtualisasi:
    • Intel VT-x dengan Tabel Halaman yang Diperluas.
    • AMD-V dengan Pengindeksan Virtualisasi Cepat.
    • Jika Anda menjalankan SQL Server di VM:
      • Di Azure, gunakan ukuran VM Generasi 2 (disarankan) atau gunakan ukuran VM Generasi 1 dengan virtualisasi berlapis diaktifkan. Periksa dokumentasi ukuran VM individual untuk menentukan ukuran VM Generasi 1 mana yang mendukung virtualisasi berlapis.
      • Pada Hyper-V 2016 atau yang lebih baru (di luar Azure), pastikan VM Anda adalah VM Generasi 2 (disarankan) atau VM Generasi 1 dengan virtualisasi berlapis diaktifkan. Untuk informasi selengkapnya, lihat Haruskah saya membuat komputer virtual generasi 1 atau 2 di Hyper-V? dan Mengonfigurasi virtualisasi berlapis.
      • Pada VMware vSphere 6.7 atau yang lebih baru, aktifkan dukungan Keamanan Berbasis Virtualisasi untuk VM seperti yang dijelaskan dalam dokumentasi VMware.
      • Hypervisor dan cloud publik lainnya dapat mendukung kemampuan virtualisasi berlapis yang memungkinkan Always Encrypted dengan Enklave VBS juga. Periksa dokumentasi solusi virtualisasi Anda untuk kompatibilitas dan instruksi konfigurasi.
  • Versi terbaru SQL Server Management Studio (SSMS). Sebagai alternatif, Anda dapat menginstal SSMS di komputer lain.

Peringatan

Di lingkungan produksi, menjalankan SSMS atau alat manajemen kunci lainnya di komputer SQL Server dapat mengurangi manfaat keamanan menggunakan Always Encrypted. Secara umum, menjalankan alat tersebut pada komputer yang berbeda disarankan. Untuk informasi selengkapnya, lihat Pertimbangan Keamanan untuk Manajemen Kunci.

Langkah 1: Pastikan keamanan berbasis virtualisasi (VBS) diaktifkan

  1. Masuk ke komputer SQL Server Anda sebagai administrator, buka konsol Windows PowerShell yang ditinggikan, dan jalankan msinfo32.exe. Periksa apakah VBS berjalan. Jika VBS berjalan, lewati langkah-langkah yang tersisa di bagian ini dan buka bagian berikutnya.

    Screenshot of the System Information virtualization-based security details.

  2. Aktifkan VBS dengan menjalankan cmdlet berikut dalam sesi PowerShell.

    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name EnableVirtualizationBasedSecurity -Value 1
    
  3. Jika komputer SQL Server Anda adalah komputer virtual, komputer fisik yang tidak mendukung Boot Aman UEFI, atau komputer fisik yang tidak dilengkapi dengan IOMMU, Anda perlu menghapus persyaratan VBS untuk fitur keamanan platform. Hapus persyaratan untuk Boot Aman dan IOMMU dengan menjalankan perintah berikut di komputer SQL Server Anda di konsol PowerShell yang ditingkatkan:

    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
    
  4. Mulai ulang komputer SQL Server lagi untuk membuat VBS menjadi online.

    Restart-Computer
    
  5. Ulangi langkah 1 untuk memeriksa apakah VBS berjalan.

Langkah 2: Aktifkan Always Encrypted dengan enklave aman di SQL Server

Dalam langkah ini, Anda akan mengaktifkan fungsionalitas Always Encrypted menggunakan enklave di instans SQL Server Anda.

  1. Menggunakan SSMS, 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.

      Screenshot of the SSMS connection option for Always Encrypted disabled.

    5. Pilih Sambungkan.

  2. Buka jendela kueri baru, dan jalankan pernyataan di bawah ini untuk mengatur jenis enklave aman ke keamanan berbasis virtualisasi (VBS).

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Mulai ulang instans SQL Server Anda agar perubahan sebelumnya berlaku. Anda dapat menghidupkan ulang instans di SSMS dengan mengklik kanan di Object Explorer dan memilih Hidupkan Ulang. Setelah instans dimulai ulang, sambungkan kembali ke instans tersebut.

  4. Konfirmasikan enklave aman sekarang dimuat dengan menjalankan kueri berikut:

    SELECT [name], [value], [value_in_use] FROM sys.configurations
    WHERE [name] = 'column encryption enclave type';
    

    Kueri harus mengembalikan hasil berikut:

    nama value value_in_use
    jenis enklave enkripsi kolom 1 1

Langkah 3: Membuat database sampel

Dalam langkah ini, Anda akan membuat database dengan beberapa data sampel, yang akan Anda enkripsi nanti.

  1. Menggunakan instans SQL Server Management Studio dari langkah sebelumnya, jalankan pernyataan di bawah ini di jendela kueri untuk membuat database baru, bernama ContosoHR.

    CREATE DATABASE [ContosoHR];
    
  2. Buat tabel baru, bernama Karyawan.

    USE [ContosoHR];
    GO
    
    CREATE SCHEMA [HR];
    GO
    
    CREATE TABLE [HR].[Employees]
    (
        [EmployeeID] [int] IDENTITY(1,1) NOT NULL,
        [SSN] [char](11) NOT NULL,
        [FirstName] [nvarchar](50) NOT NULL,
        [LastName] [nvarchar](50) NOT NULL,
        [Salary] [money] NOT NULL
    ) ON [PRIMARY];
    
  3. Menambahkan beberapa catatan karyawan ke tabel Karyawan.

    USE [ContosoHR];
    GO
    
    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('795-73-9838'
            , N'Catherine'
            , N'Abel'
            , $31692);
    
    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('990-00-6818'
            , N'Kim'
            , N'Abercrombie'
            , $55415);
    

Langkah 4: Menyediakan kunci berkemampuan enklave

Dalam langkah ini, Anda akan membuat kunci master kolom dan kunci enkripsi kolom yang memungkinkan komputasi enklave.

  1. Menggunakan instans SSMS dari langkah sebelumnya, di Object Explorer, perluas database Anda dan navigasi ke Keamanan>Kunci Always Encrypted.

  2. Sediakan kunci master kolom baru yang berkemampuan enklave:

    1. Klik kanan Kunci Always Encrypted dan pilih Kunci Master Kolom Baru....

    2. Pilih nama kunci master kolom Anda: CMK1.

    3. Pastikan Anda memilih Windows Certificate Store (Pengguna Saat Ini atau Komputer Lokal) atau Azure Key Vault.

    4. Pilih Perbolehkan komputasi enklave.

    5. Jika Anda memilih Azure Key Vault, masuk ke Azure dan pilih brankas kunci Anda. Untuk informasi selengkapnya tentang cara membuat brankas kunci untuk Always Encrypted, lihat Mengelola brankas kunci Anda dari portal Azure.

    6. Pilih sertifikat atau kunci Nilai Kunci Azure Anda jika sudah ada, atau pilih tombol Buat Sertifikat untuk membuat yang baru.

    7. PilihOK.

      Screenshot of the allow enclave computations selection in SSMS when creating a new column master key.

  3. Buat kunci enkripsi kolom berkemampuan enklave baru:

    1. Klik kanan Kunci Always Encrypted dan pilih Kunci Enkripsi Kolom Baru.
    2. Masukkan nama untuk kunci enkripsi kolom baru: CEK1.
    3. Di menu turun-bawah Kunci master kolom, pilih kunci master kolom yang Anda buat di langkah sebelumnya.
    4. PilihOK.

Langkah 5: Mengenkripsi beberapa kolom di tempat

Dalam langkah ini, Anda akan mengenkripsi data yang disimpan di kolom SSN dan Gaji di dalam enklave sisi server, lalu menguji kueri SELECT pada 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).

    5. Pilih Aktifkan enklave aman.

    6. Atur Protokol ke Tidak Ada.

      Screenshot of the connect to server Always Encrypted tab without attestation using SSMS.

    7. Pilih Sambungkan.

    8. Jika Anda diminta untuk mengaktifkan Parameterisasi untuk kueri Always Encrypted, pilih Aktifkan.

  2. Menggunakan instans SSMS yang sama (dengan Always Encrypted diaktifkan), buka jendela kueri baru dan enkripsi kolom SSN dan Gaji dengan menjalankan kueri di bawah ini.

    USE [ContosoHR];
    GO
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [Salary] [money]
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    

    Catatan

    Perhatikan pernyataan ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE untuk menghapus cache rencana kueri untuk database dalam skrip di atas. Setelah mengubah tabel, Anda perlu menghapus rencana untuk semua batch dan prosedur tersimpan yang mengakses tabel, untuk me-refresh informasi enkripsi parameter.

  3. Untuk memverifikasi kolom SSN dan Gaji yang saat ini dienkripsi, buka jendela kueri baru di instans SSMS tanpa Always Encrypted diaktifkan untuk koneksi database dan jalankan pernyataan di bawah ini. Jendela kueri harus mengembalikan nilai terenkripsi di kolom SSN dan Gaji. Jika Anda menjalankan kueri yang sama menggunakan instans SSMS dengan Always Encrypted diaktifkan, Anda akan melihat data didekripsi.

    SELECT * FROM [HR].[Employees];
    

Langkah 6: Jalankan kueri yang kaya terhadap kolom terenkripsi

Sekarang, Anda dapat menjalankan kueri kaya terhadap kolom terenkripsi. Beberapa pemrosesan kueri akan dilakukan di dalam enklave sisi server Anda.

  1. Dalam instans SSMS dengan Always Encrypted diaktifkan, pastikan Parameterisasi untuk Always Encrypted juga 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.
  2. Buka jendela kueri baru, tempelkan dan jalankan kueri di bawah ini. Kueri harus mengembalikan nilai teksbersih dan baris yang memenuhi kriteria pencarian yang ditentukan.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Coba kueri yang sama lagi dalam instans SSMS yang tidak mengaktifkan Always Encrypted, dan catat kegagalan yang terjadi.

Langkah berikutnya

Setelah menyelesaikan tutorial ini, Anda dapat membuka salah satu tutorial berikut:

Baca juga