Руководство по разработке приложения .NET с помощью Always Encrypted с безопасными анклавами

Применимо к: SQL Server 2019 (15.x) и более поздним версиям на Windows База данных Azure SQL

В этом руководстве содержатся сведения о разработке приложения, которое выполняет запросы к базе данных, использующие безопасный анклав на стороне сервера для Always Encrypted с защищенными анклавами.

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

Убедитесь, что вы выполнили одно из руководств по началу работы с Always Encrypted с безопасными анклавами , прежде чем выполнить приведенные ниже действия, описанные в этом руководстве.

Кроме того, требуется Visual Studio (версия 2022 рекомендуется) — его можно скачать.https://visualstudio.microsoft.com/ Среда разработки ваших приложений должна использовать .NET Framework 4.6.1 или более позднюю версию либо .NET Core 3.1 или более позднюю версию.

Шаг 1. Настройка проекта Visual Studio

Чтобы использовать Always Encrypted с безопасными анклавами в приложении .NET Framework, необходимо убедиться, что ваше приложение ориентировано на .NET Framework версии 4.6.1 или более поздней. Чтобы использовать Always Encrypted с безопасными анклавами в приложении .NET Core, необходимо убедиться, что приложение предназначено для .NET Core 3.1 или более поздней версии.

Кроме того, если вы храните главный ключ столбца в Azure Key Vault, необходимо также интегрировать приложение с Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider NuGet.

  1. Откройте Visual Studio.

  2. Создайте проект консольного приложения C# (.NET Framework или Core).

  3. Убедитесь, что ваш проект ориентирован как минимум на .NET Framework 4.6 или .NET Core 3.1. Щелкните правой кнопкой мыши проект в Обозревателе решений, выберите Свойства и укажите целевую платформу.

  4. Установите следующий пакет NuGet. Щелкните Инструменты (главное меню) >Диспетчер пакетов NuGet>Консоль диспетчера пакетов. Выполните следующий код в консоли диспетчера пакетов.

    Install-Package Microsoft.Data.SqlClient -Version 5.0.1
    
  5. Если вы используете Azure Key Vault для хранения главных ключей столбцов, установите следующие пакеты NuGet, щелкнув Инструменты (главное меню) >Диспетчер пакетов NuGet>Консоль диспетчера пакетов. Выполните следующий код в консоли диспетчера пакетов.

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

Шаг 2. Реализация логики приложения

Приложение подключится к базе данных ContosoHR, созданной в одном из руководств, см. Prerequisites, и выполнит запрос, содержащий предикат LIKE для столбца SSN и сравнение по диапазону для столбца Salary.

  1. Замените содержимое файла Program.cs (созданного в Visual Studio) на приведенный ниже код.

    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. Обновите строку подключения к базе данных.

    1. Укажите допустимое имя сервера и параметры аутентификации базы данных.
    2. Если вы используете аттестацию для своей базы данных, задайте параметру «Enclave Attestation Protocol» правильное значение для используемой службы аттестации (HGS для Host Guardian Service или AAS для Microsoft Аттестация Azure). В противном случае задайте для протокола аттестации анклава значение None.
  3. Выполните сборку приложения и запустите его.