Sdílet prostřednictvím


Kurz: Vývoj aplikace rozhraní .NET Framework pomocí funkce Always Encrypted se zabezpečenými enklávy

Platí pro: SQL Server 2019 (15.x) a novější verze ve službě Windows Azure SQL Database

V tomto kurzu se naučíte vyvíjet aplikaci, která vydává databázové dotazy, které používají zabezpečené enklávy na straně serveru pro Always Encrypted se zabezpečenými enklávami.

Poznámka:

Rozhraní .NET Framework nepodporuje použití funkce Always Encrypted s enklávami VBS bez attestace. Tento tutoriál platí jenom v případě, že používáte attestaci s Microsoft Azure Attestation (s enklávy Intel SGX ve službě Azure SQL Database) nebo službou Host Guardian Service (s enklávy VBS na SQL Serveru).

Požadavky

Než budete postupovat podle následujících kroků v tomto kurzu, ujistěte se, že jste dokončili jeden z začínáte používat funkci Always Encrypted se zabezpečenými enklávami kurzů.

Budete také potřebovat Visual Studio (doporučuje se verze 2022) – stáhněte si ho z https://visualstudio.microsoft.com/. Váš počítač pro vývoj aplikací musí používat rozhraní .NET Framework 4.7.2 nebo novější.

Krok 1: Nastavení projektu sady Visual Studio

Pokud chcete používat funkci Always Encrypted se zabezpečenými enklávami v aplikaci .NET Framework, musíte zajistit, aby vaše aplikace byla sestavena proti rozhraní .NET Framework 4.7.2 a je integrovaná s Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders NuGet. Pokud navíc ukládáte hlavní klíč sloupce ve službě Azure Key Vault, musíte také integrovat aplikaci s Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider NuGet verze 2.4.0 nebo novější.

  1. Otevřete Visual Studio.

  2. Vytvořte nový projekt konzolové aplikace C# (.NET Framework).

  3. Ujistěte se, že váš projekt cílí alespoň na rozhraní .NET Framework 4.7.2. Klikněte pravým tlačítkem na projekt v Průzkumníku řešení, vyberte Vlastnosti a nastavte cílovou architekturu na .NET Framework 4.7.2.

  4. Nainstalujte následující balíček NuGet tak, že přejdete dokonzoly Správce>balíčků NuGet> (hlavní nabídka). V konzole Správce balíčků spusťte následující kód.

    Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders -IncludePrerelease
    
  5. Pokud k ukládání hlavních klíčů sloupců používáte Azure Key Vault, nainstalujte následující balíčky NuGet, a to tak, že přejdete do Nástroje (hlavní nabídka) >Správce balíčků NuGet>Konzole správce balíčků. V konzole Správce balíčků spusťte následující kód.

    Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider -IncludePrerelease -Version 2.4.0
    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    
  6. Otevřete soubor App.config projektu.

  7. Vyhledejte <configuration> oddíl a přidejte nebo aktualizujte <configSections> oddíly.

    1. Pokud <configuration> neobsahuje oddíl <configSections>, přidejte následující obsah bezprostředně pod <configuration>.

      <configSections>
        <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </configSections>
      
    2. Pokud oddíl <configuration> už obsahuje oddíl <configSections>, přidejte následující řádek do oddílu <configSections>.

      <section name="SqlColumnEncryptionEnclaveProviders"  type="System.   Data.SqlClient.   SqlColumnEncryptionEnclaveProviderConfigurationSection, System.   Data,  Version=4.0.0.0, Culture=neutral,    PublicKeyToken=b77a5c561934e089" />
      
  8. Do oddílu <configuration> níže </configSections>přidejte nový oddíl, který určuje zprostředkovatele enklávy, který se má použít k testování a interakci se zabezpečeným enklávem na straně serveru.

    1. Pokud používáte SQL Server a službu Strážce hostitele (HGS) (používáte databázi z kurzu: Začínáme používat funkci Always Encrypted se zabezpečenými enklávy v SQL Serveru), přidejte následující část.

      <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>
      

      Tady je úplný příklad souboru app.config pro jednoduchou konzolovou aplikaci.

      <?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. Pokud používáte Azure SQL Database s enklávy SGX a ověřováním Microsoft Azure (používáte databázi z kurzu: Začínáme se službou Always Encrypted se zabezpečenými enklávy Intel SGX ve službě Azure SQL Database), přidejte následující část.

      <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>
      

      Tady je úplný příklad souboru app.config pro jednoduchou konzolovou aplikaci.

      <?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>
      

Krok 2: Implementace logiky aplikace

Vaše aplikace se připojí k databázi ContosoHR , která byla vytvořena v jednom z kurzů, viz Požadavky a spustí dotaz obsahující LIKE predikát ve sloupci SSN a porovnání rozsahu ve sloupci Plat .

  1. Obsah souboru Program.cs (vygenerovaného sadou Visual Studio) nahraďte následujícím kódem. Aktualizujte připojovací řetězec databáze pomocí názvu serveru, nastavení ověřování databáze a URL pro ověření enklávy pro vaše prostředí.

    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. Sestavte a spusťte aplikaci.

Viz také