Udostępnij przez


Samouczek: tworzenie aplikacji platformy .NET przy użyciu funkcji Always Encrypted z bezpiecznymi enklawami

Dotyczy: SQL Server 2019 (15.x) i nowsze wersje na Windows Azure SQL Database

W tym samouczku przedstawiono sposób tworzenia aplikacji, która wysyła zapytania do bazy danych, wykorzystując bezpieczną enklawę po stronie serwera w funkcji Always Encrypted z bezpiecznymi enklawami.

Wymagania wstępne

Upewnij się, że ukończono jeden z samouczków Wprowadzenie do korzystania z funkcji Always Encrypted z bezpiecznymi enklawami, zanim przystąpisz do wykonania poniższych kroków w tym samouczku.

Ponadto potrzebujesz programu Visual Studio (zalecana jest wersja 2022) — możesz pobrać go z witryny https://visualstudio.microsoft.com/. Środowisko deweloperskie aplikacji musi używać programu .NET Framework 4.6.1 lub nowszego lub .NET Core 3.1 lub nowszego.

Krok 1. Konfigurowanie projektu programu Visual Studio

Aby używać funkcji Always Encrypted z bezpiecznymi enklawami w aplikacji .NET Framework, upewnij się, że aplikacja jest przeznaczona dla platformy .NET Framework 4.6.1 lub nowszej. Aby używać funkcji Always Encrypted z bezpiecznymi enklawami w aplikacji .NET Core, upewnij się, że aplikacja jest przeznaczona dla platformy .NET Core 3.1 lub nowszej.

Ponadto, jeśli przechowujesz klucz główny kolumny w usłudze Azure Key Vault, musisz również zintegrować swoją aplikację z pakietem NuGet Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider.

  1. Otwórz program Visual Studio.

  2. Utwórz nowy projekt aplikacji konsolowej języka C# (.NET Framework/Core).

  3. Upewnij się, że projekt jest przeznaczony dla .NET Framework 4.6 lub .NET Core 3.1. Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań, wybierz pozycję Właściwości i ustaw platformę docelową.

  4. Zainstaluj następujący pakiet NuGet, przechodząc do pozycji Narzędzia (menu główne) >Konsola menedżera>pakietów NuGet. Uruchom następujący kod w konsoli menedżera pakietów.

    Install-Package Microsoft.Data.SqlClient -Version 5.0.1
    
  5. Jeśli używasz usługi Azure Key Vault do przechowywania kluczy głównych kolumn, zainstaluj następujące pakiety NuGet, przechodząc do pozycji Narzędzia (menu główne) >Konsola menedżera>pakietów NuGet. Uruchom następujący kod w konsoli menedżera pakietów.

    Install-Package Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider -Version 3.0.0
    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    

Krok 2. Implementowanie logiki aplikacji

Aplikacja połączy się z bazą danych ContosoHR utworzoną w jednym z samouczków, zobacz Wymagania wstępne i uruchomi zapytanie zawierające LIKE predykat w kolumnie SSN i porównanie zakresu w kolumnie Wynagrodzenie .

  1. Zastąp zawartość pliku Program.cs (wygenerowanego przez program Visual Studio) następującym kodem.

    using System;
    using Microsoft.Data.SqlClient;
    using System.Data;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                // Connection string for SQL Server
                string connectionString = "Data Source = myserver; Initial Catalog = ContosoHR; Column Encryption Setting = Enabled;Attestation Protocol = HGS; Enclave Attestation Url = http://hgs.bastion.local/Attestation; Integrated Security = true";
    
                // Connection string for Azure SQL Database with Intel SGX enclaves
                //string connectionString = "Data Source = myserver.database.windows.net; Initial Catalog = ContosoHR; Column Encryption Setting = Enabled;Attestation Protocol = AAS; Enclave Attestation Url = https://myattestationprovider.uks.attest.azure.net/attest/SgxEnclave; User ID=user; Password=<password>";
    
                // Connection string for Azure SQL Database with VBS enclaves
                //string connectionString = "Data Source = myserver.database.windows.net; Initial Catalog = ContosoHR; Column Encryption Setting = Enabled;Attestation Protocol = None; 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. Zaktualizuj parametry połączenia bazy danych.

    1. Ustaw prawidłową nazwę serwera i ustawienia uwierzytelniania bazy danych.
    2. Jeśli używasz poświadczenia dla bazy danych, ustaw Protokół Poświadczenia Enklawy na poprawną wartość dla usługi poświadczenia (HGS dla Host Guardian Service lub AAS dla Microsoft Azure Attestation). W przeciwnym razie ustaw protokół zaświadczania enklawy na None.
  3. Skompiluj i uruchom aplikację.

Zobacz także