Руководство по Разработка приложения .NET Framework с помощью Always Encrypted с безопасными анклавамиTutorial: Develop a .NET Framework application using Always Encrypted with secure enclaves

Применимо к:Applies to: даSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) — только Windows Применимо к:Applies to: даSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) - Windows only

В этом руководстве содержатся сведения о разработке простого приложения, которое выполняет запросы к базе данных, использующие безопасный анклав на стороне сервера для Always Encrypted с защищенными анклавами.This tutorial teaches you how to develop a simple application that issues database queries that use a server-side secure enclave for Always Encrypted with secure enclaves.

Предварительные требованияPrerequisites

Это руководство представляет собой продолжение статьи Руководство. Начало работы с Always Encrypted с безопасными анклавами с использованием SSMS.This tutorial is the continuation of Tutorial: Getting Started with Always Encrypted with secure enclaves using SSMS. Убедитесь, что вы полностью изучили его, прежде чем выполнять действия ниже.Make sure you've completed it, before following the below steps.

Кроме того, требуется среда Visual Studio (рекомендуется версия 2019), которую можно скачать на странице https://visualstudio.microsoft.com/.In addition, you need Visual Studio (version 2019 is recommended) - you can download it from https://visualstudio.microsoft.com/. На компьютере для разработки приложений должна быть установлена платформа .NET Framework 4.7.2 или более поздней версии.You application development machine must run .NET Framework 4.7.2 or later.

Шаг 1. Настройка проекта в Visual StudioStep 1: Set up your Visual Studio Project

Чтобы использовать функцию Always Encrypted с безопасными анклавами в приложении .NET Framework, вам нужно убедиться в том, что приложение создано на основе .NET Framework 4.7.2 и интегрировано с пакетом NuGet Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders.To use Always Encrypted with secure enclaves in a .NET Framework application, you need to make sure your application is built against .NET Framework 4.7.2 and is integrated with the Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders NuGet. Кроме того, если вы храните главный ключ столбца в Azure Key Vault, необходимо также интегрировать приложение с пакетом NuGet Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider версии 2.2.0 или более поздней.In addition, if you store you column master key in Azure Key Vault, you also need to integrate your application with the Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider NuGet, version 2.2.0 or later.

  1. Запустите Visual Studio.Open Visual Studio.

  2. Создайте проект консольного приложения C# (.NET Framework).Create a new C# Console App (.NET Framework) project.

  3. Убедитесь, что в проекте настроена по крайней мере платформа .NET Framework 4.7.2.Make sure your project targets at least .NET Framework 4.7.2. Щелкните правой кнопкой мыши проект в обозревателе решений, выберите "Свойства" и установите целевую платформу. NET Framework 4.7.2.Right-click on the project in Solution Explorer, select Properties and set Target framework to .NET Framework 4.7.2.

  4. Установите следующий пакет NuGet. Щелкните Инструменты (главное меню) > Диспетчер пакетов NuGet > Консоль диспетчера пакетов.Install the following NuGet package by going to Tools (main menu) > NuGet Package Manager > Package Manager Console. Выполните следующий код в консоли диспетчера пакетов.Run the following code in the Package Manager Console.

    Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders -IncludePrerelease
    
  5. Если вы используете Azure Key Vault для хранения главных ключей столбцов, установите следующие пакеты NuGet, щелкнув Инструменты (главное меню) > Диспетчер пакетов NuGet > Консоль диспетчера пакетов.If you use Azure Key Vault for storing your column master keys, install the following NuGet packages by going to Tools (main menu) > NuGet Package Manager > Package Manager Console. Выполните следующий код в консоли диспетчера пакетов.Run the following code in the Package Manager Console.

    Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider -IncludePrerelease -Version 2.2.0
    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    
  6. Откройте файл App.config для проекта.Open the App.config file for your project.

  7. Откройте раздел <configuration> и добавьте или обновите разделы <configSections>.Locate the <configuration> section and add or update the <configSections> sections.

    а.a. Если в разделе <configuration> нет раздела <configSections>, добавьте приведенное ниже содержимое сразу после раздела <configuration>.If the <configuration> section does not contain the <configSections> section, add the following content immediately below <configuration>.

    <configSections>
       <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    </configSections>
    

    b.b. Если раздел <configruation> уже содержит раздел <configSections>, добавьте следующую строку в раздел <configSections>:If the <configruation> section already contains the <configSections> section, add the following line within the <configSections>:

    <section name="SqlColumnEncryptionEnclaveProviders"  type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data,  Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /\>
    
  8. В разделе конфигурации под <configSections> добавьте следующий раздел, в котором указан поставщик анклава, который будет использоваться для подтверждения анклавов VBS и взаимодействия с ними:Inside the configuration section, below the <configSections>, add the following section, which specific an enclave provider to be used to attest and interact with VBS enclaves:

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

Ниже представлен полный пример файла app.config для простого консольного приложения.Here is a complete example of an app.config file for a simple console application.

<?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. Реализация логики приложенияStep 2: Implement your application logic

Приложение подключится к базе данных ContosoHR из статьи Руководство. Начало работы с Always Encrypted с безопасными анклавами с использованием SSMS и выполнит запрос, содержащий предикат LIKE в столбце SSN, а также проведет сравнение диапазонов в столбце Salary.Your application will connect to the ContosoHR database from Tutorial: Getting started with Always Encrypted with secure enclaves using SSMS and it will run a query that contains the LIKE predicate on the SSN column and and a range comparison on the Salary column.

  1. Замените содержимое файла Program.cs (созданного в Visual Studio) на приведенный ниже код.Replace the content of the Program.cs file (generated by Visual Studio) with the below code. Обновите строку подключения к базе данных, указав имя сервера и URL-адрес аттестации анклава для своей среды.Update the database connection string with your server name and the an enclave attestation URL for your environment. Можно также изменить параметры проверки подлинности базы данных.You may also update database authentication settings.

    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";
    
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
    
                    SqlCommand cmd = connection.CreateCommand();
                    cmd.CommandText = @"SELECT [SSN], [FirstName], [LastName], [Salary] FROM [dbo].[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 = "%1111";
                    paramSSNPattern.Size = 11;
    
                    cmd.Parameters.Add(paramSSNPattern);
    
                    SqlParameter MinSalary = cmd.CreateParameter();
    
                    MinSalary.ParameterName = @"@MinSalary";
                    MinSalary.DbType = DbType.Currency;
                    MinSalary.Direction = ParameterDirection.Input;
                    MinSalary.Value = 900;
    
                    cmd.Parameters.Add(MinSalary);
                    cmd.ExecuteNonQuery();
    
                    SqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
    
                    {
                        Console.WriteLine(reader);
                        Console.WriteLine(reader[0] + ", " + reader[1] + ", " + reader[2] + ", " + reader[3]);
                    }   
                    Console.ReadKey();
                }
            }
        }
    }
    
  2. Выполните сборку и запустите приложение.Build and run the application.

См. также:See Also