Tutorial: Mengembangkan aplikasi .NET Framework menggunakan Always Encrypted dengan enklave aman

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

Tutorial ini mengajarkan Anda cara mengembangkan aplikasi yang mengeluarkan kueri database yang menggunakan enklave aman sisi server untuk Always Encrypted dengan enklave aman.

Catatan

.NET Framework tidak mendukung penggunaan Always Encrypted dengan enklave VBS tanpa pengesahan. Tutorial ini hanya berlaku jika Anda menggunakan pengesahan dengan Microsoft Azure Attestation (dengan enklave Intel SGX di Azure SQL Database) atau Host Guardian Service (dengan enklave VBS di SQL Server).

Prasyarat

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

Anda juga memerlukan Visual Studio (versi 2022 disarankan) - unduh dari https://visualstudio.microsoft.com/. Komputer pengembangan aplikasi Anda harus menjalankan .NET Framework 4.7.2 atau yang lebih baru.

Langkah 1: Siapkan Proyek Visual Studio Anda

Untuk menggunakan Always Encrypted dengan enklave aman dalam aplikasi .NET Framework, Anda perlu memastikan aplikasi Anda dibangun terhadap .NET Framework 4.7.2 dan terintegrasi dengan Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders NuGet. Selain itu, jika Anda menyimpan kunci master kolom di Azure Key Vault, Anda juga perlu mengintegrasikan aplikasi Anda dengan Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider NuGet, versi 2.4.0 atau yang lebih baru.

  1. Buka Visual Studio.

  2. Buat proyek Aplikasi Konsol C# (.NET Framework) baru.

  3. Pastikan proyek Anda menargetkan setidaknya .NET Framework 4.7.2. Klik kanan pada proyek di Penjelajah Solusi, pilih Properti dan atur Kerangka kerja Target ke .NET Framework 4.7.2.

  4. Instal paket NuGet berikut dengan membuka Alat (menu utama)> Konsol Manajer Paket Manajer>Paket NuGet. Jalankan kode berikut di Konsol Manajer Paket.

    Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders -IncludePrerelease
    
  5. Jika Anda menggunakan Azure Key Vault untuk menyimpan kunci master kolom Anda, instal paket NuGet berikut dengan masuk ke Alat (menu utama)> Konsol Manajer Paket Manajer>Paket NuGet. Jalankan kode berikut di Konsol Manajer Paket.

    Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider -IncludePrerelease -Version 2.4.0
    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    
  6. Buka file App.config untuk proyek Anda.

  7. Temukan bagian <configuration> dan tambahkan atau perbarui bagian <configSections> .

    1. Jika bagian <configuration> tidak berisi bagian <configSections> , tambahkan konten berikut segera di bawah ini <configuration>.

      <configSections>
        <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </configSections>
      
    2. Jika bagian <configuration> sudah berisi bagian <configSections> , tambahkan baris berikut di dalam bagian <configSections> :

      <section name="SqlColumnEncryptionEnclaveProviders"  type="System.   Data.SqlClient.   SqlColumnEncryptionEnclaveProviderConfigurationSection, System.   Data,  Version=4.0.0.0, Culture=neutral,    PublicKeyToken=b77a5c561934e089" />
      
  8. Di dalam bagian <configuration> , di bawah ini </configSections>, tambahkan bagian baru, yang menentukan penyedia enklave yang akan digunakan untuk membuktikan dan berinteraksi dengan enklave aman sisi server Anda.

    1. Jika Anda menggunakan SQL Server dan Host Guardian Service (HGS) (Anda menggunakan database dari Tutorial: Mulai menggunakan Always Encrypted dengan enklave aman di SQL Server), tambahkan bagian di bawah ini.

      <SqlColumnEncryptionEnclaveProviders>
        <providers>
          <add name="VBS"  type="Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders.HostGuardianServiceEnclaveProvider,  Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders,    Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
        </providers>
      </SqlColumnEncryptionEnclaveProviders>
      

      Berikut adalah contoh lengkap file app.config untuk aplikasi konsol sederhana.

      <?xml version="1.0" encoding="utf-8" ?>
      <configuration>
        <configSections>
          <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        </configSections>
        <SqlColumnEncryptionEnclaveProviders>
          <providers>
            <add name="VBS"  type="Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders.HostGuardianServiceEnclaveProvider,  Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders,    Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
          </providers>
        </SqlColumnEncryptionEnclaveProviders>
        <startup> 
         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
        </startup>
      </configuration>
      
    2. Jika Anda menggunakan Azure SQL Database dengan enklave SGX dan Microsoft Azure Attestation (Anda menggunakan database dari Tutorial: Memulai Always Encrypted dengan enklave Intel SGX yang aman di Azure SQL Database), tambahkan bagian di bawah ini.

      <SqlColumnEncryptionEnclaveProviders>
        <providers>
          <add name="SGX" type="Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders.AzureAttestationEnclaveProvider, Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
        </providers>
      </SqlColumnEncryptionEnclaveProviders>
      

      Berikut adalah contoh lengkap file app.config untuk aplikasi konsol sederhana.

      <?xml version="1.0" encoding="utf-8" ?>
      <configuration>
        <configSections>
          <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        </configSections>
        <SqlColumnEncryptionEnclaveProviders>
          <providers>
            <add name="SGX" type="Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders.AzureAttestationEnclaveProvider, Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
          </providers>
        </SqlColumnEncryptionEnclaveProviders>
        <startup> 
         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
        </startup>
      </configuration>
      

Langkah 2: Menerapkan logika aplikasi Anda

Aplikasi Anda akan tersambung ke database ContosoHR yang dibuat di salah satu tutorial, lihat Prasyarat dan akan menjalankan kueri yang berisi LIKE predikat pada kolom SSN dan perbandingan rentang pada kolom Gaji .

  1. Ganti konten file Program.cs (dihasilkan oleh Visual Studio) dengan kode di bawah ini. Perbarui string koneksi database dengan nama server, pengaturan autentikasi database, dan URL pengesahan enklave untuk lingkungan Anda.

    using System;
    using System.Data.SqlClient;
    using System.Data;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                string connectionString = "Data Source = myserver; Initial Catalog = ContosoHR; Column Encryption Setting = Enabled;Enclave Attestation Url = http://hgs.bastion.local/Attestation; Integrated Security = true";
    
                //string connectionString = "Data Source = myserver.database.windows.net; Initial Catalog = ContosoHR; Column Encryption Setting = Enabled;Enclave Attestation Url = https://myattestationprovider.uks.attest.azure.net/attest/SgxEnclave; User ID=user; Password=password";
    
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
    
                    SqlCommand cmd = connection.CreateCommand();
                    cmd.CommandText = @"SELECT [SSN], [FirstName], [LastName], [Salary] FROM [HR].[Employees] WHERE [SSN] LIKE @SSNPattern AND [Salary] > @MinSalary;";
    
                    SqlParameter paramSSNPattern = cmd.CreateParameter();
    
                    paramSSNPattern.ParameterName = @"@SSNPattern";
                    paramSSNPattern.DbType = DbType.AnsiStringFixedLength;
                    paramSSNPattern.Direction = ParameterDirection.Input;
                    paramSSNPattern.Value = "%9838";
                    paramSSNPattern.Size = 11;
    
                    cmd.Parameters.Add(paramSSNPattern);
    
                    SqlParameter MinSalary = cmd.CreateParameter();
    
                    MinSalary.ParameterName = @"@MinSalary";
                    MinSalary.DbType = DbType.Currency;
                    MinSalary.Direction = ParameterDirection.Input;
                    MinSalary.Value = 20000;
    
                    cmd.Parameters.Add(MinSalary);
                    cmd.ExecuteNonQuery();
    
                    SqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
    
                    {
                        Console.WriteLine(reader[0] + ", " + reader[1] + ", " + reader[2] + ", " + reader[3]);
                    }   
                    Console.ReadKey();
                }
            }
        }
    }
    
  2. Membuat dan menjalankan aplikasi.

Baca juga