Delen via


Zelfstudie: Een .NET Framework-toepassing ontwikkelen met Always Encrypted met beveiligde enclaves

Van toepassing op: SQL Server 2019 (15.x) en latere versies in Windows Azure SQL Database

In deze zelfstudie leert u hoe u een toepassing ontwikkelt waarmee databasequery's worden uitgevoerd die gebruikmaken van een beveiligde enclave aan de serverzijde voor Always Encrypted met beveiligde enclaves.

Opmerking

.NET Framework biedt geen ondersteuning voor het gebruik van Always Encrypted met VBS-enclaves zonder attestation. Deze zelfstudie is alleen van toepassing als u verificatie gebruikt met Microsoft Azure Attestation (met Intel SGX-enclaves in Azure SQL Database) of Host Guardian Service (met VBS-enclaves in SQL Server).

Vereiste voorwaarden

Zorg ervoor dat u een van de zelfstudies Aan de slag met Always Encrypted met beveiligde enclaves hebt voltooid voordat u de onderstaande stappen in deze zelfstudie volgt.

U hebt ook Visual Studio nodig (versie 2022 wordt aanbevolen) - download het van https://visualstudio.microsoft.com/. Op uw ontwikkelcomputer voor toepassingen moet .NET Framework 4.7.2 of hoger worden uitgevoerd.

Stap 1: Uw Visual Studio-project instellen

Als u Always Encrypted wilt gebruiken met beveiligde enclaves in een .NET Framework-toepassing, moet u ervoor zorgen dat uw toepassing is gebouwd op basis van .NET Framework 4.7.2 en is geïntegreerd met Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders NuGet. Als u uw kolomhoofdsleutel opslaat in Azure Key Vault, moet u uw toepassing ook integreren met Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider NuGet, versie 2.4.0 of hoger.

  1. Open Visual Studio.

  2. Maak een nieuw C#-console-appproject (.NET Framework).

  3. Zorg ervoor dat uw project ten minste .NET Framework 4.7.2 ondersteunt. Klik met de rechtermuisknop op het project in Solution Explorer, selecteer Eigenschappen en stel Target Framework in op .NET Framework 4.7.2.

  4. Installeer het volgende NuGet-pakket door in het hoofdmenu naar >NuGet Package Manager>Package Manager-console te gaan. Voer de volgende code uit in de Package Manager-console.

    Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders -IncludePrerelease
    
  5. Als u Azure Key Vault gebruikt voor het opslaan van uw kolomhoofdsleutels, installeert u de volgende NuGet-pakketten door naar Tools (hoofdmenu) >NuGet Package Manager>Package Manager Console te gaan. Voer de volgende code uit in de Package Manager-console.

    Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider -IncludePrerelease -Version 2.4.0
    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    
  6. Open het App.config-bestand voor uw project.

  7. Zoek de <configuration> sectie en voeg de <configSections> secties toe of werk deze bij.

    1. Als de <configuration> sectie de sectie <configSections> bevat, voegt u de volgende inhoud direct hieronder <configuration>toe.

      <configSections>
        <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </configSections>
      
    2. Als de <configuration> sectie de <configSections> sectie al bevat, voegt u de volgende regel toe in de <configSections> sectie:

      <section name="SqlColumnEncryptionEnclaveProviders"  type="System.   Data.SqlClient.   SqlColumnEncryptionEnclaveProviderConfigurationSection, System.   Data,  Version=4.0.0.0, Culture=neutral,    PublicKeyToken=b77a5c561934e089" />
      
  8. Voeg in de <configuration> sectie hieronder </configSections>een nieuwe sectie toe, waarmee een enclaveprovider wordt opgegeven die moet worden gebruikt om uw beveiligde enclave aan de serverzijde te bevestigen en te gebruiken.

    1. Als u SQL Server en Host Guardian Service (HGS) gebruikt (u gebruikt de database uit de zelfstudie: Aan de slag met Always Encrypted met beveiligde enclaves in SQL Server), voegt u de onderstaande sectie toe.

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

      Hier volgt een volledig voorbeeld van een app.config-bestand voor een eenvoudige consoletoepassing.

      <?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. Als u Azure SQL Database gebruikt met SGX-enclaves en Microsoft Azure Attestation (u gebruikt de database uit de zelfstudie: Aan de slag met Always Encrypted met beveiligde Intel SGX-enclaves in Azure SQL Database), voegt u de onderstaande sectie toe.

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

      Hier volgt een volledig voorbeeld van een app.config-bestand voor een eenvoudige consoletoepassing.

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

Stap 2: Uw toepassingslogica implementeren

Uw toepassing maakt verbinding met de ContosoHR-database die is gemaakt in een van de zelfstudies , zie Vereisten en voert een query uit die het LIKE predicaat bevat in de kolom SSN en een bereikvergelijking in de kolom Salaris .

  1. Vervang de inhoud van het Program.cs-bestand (gegenereerd door Visual Studio) door de onderstaande code. Werk de databaseverbindingsreeks bij met de servernaam, databaseverificatie-instellingen en de enclave-attestation-URL voor uw omgeving.

    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. Bouw en voer de toepassing uit.

Zie ook