Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: SQL Server 2019 (15.x) и более поздние версии в Windows
База данных SQL Azure
В этом руководстве содержатся сведения о разработке приложения, которое выполняет запросы к базе данных, использующие безопасный анклав на стороне сервера для Always Encrypted с защищенными анклавами.
Примечание.
.NET Framework не поддерживает использование Always Encrypted с анклавами VBS без аттестации. Это руководство применимо только в том случае, если вы используете аттестацию с Microsoft Аттестация Azure (с анклавами Intel SGX в База данных SQL Azure) или Host Guardian Service (с анклавами VBS в SQL Server).
Предварительные требования
Убедитесь, что вы выполнили одно из руководств по началу работы с Always Encrypted с безопасными анклавами , прежде чем выполнить приведенные ниже действия, описанные в этом руководстве.
Вам также потребуется Visual Studio (версия 2022 рекомендуется) — скачать его из https://visualstudio.microsoft.com/. На компьютере для разработки приложений должна быть установлена платформа .NET Framework 4.7.2 или более поздней версии.
Шаг 1. Настройка проекта Visual Studio
Чтобы использовать функцию Always Encrypted с безопасными анклавами в приложении .NET Framework, вам нужно убедиться в том, что приложение создано на основе .NET Framework 4.7.2 и интегрировано с пакетом NuGet Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders. Кроме того, при хранении главного ключа столбца в Azure Key Vault также необходимо интегрировать приложение с Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider NuGet версии 2.4.0 или более поздней.
Откройте Visual Studio.
Создайте проект консольного приложения C# (.NET Framework).
Убедитесь, что ваш проект ориентирован как минимум на .NET Framework 4.7.2. Щелкните правой кнопкой мыши проект в Обозревателе решений, выберите Свойства и установите для параметра Целевая платформа значение ".NET Framework 4.7.2".
Установите следующий пакет NuGet. Щелкните Инструменты (главное меню) >Диспетчер пакетов NuGet>Консоль диспетчера пакетов. Выполните следующий код в консоли диспетчера пакетов.
Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders -IncludePrereleaseЕсли вы используете Azure Key Vault для хранения главных ключей столбцов, установите следующие пакеты NuGet, щелкнув Инструменты (главное меню) >Диспетчер пакетов NuGet>Консоль диспетчера пакетов. Выполните следующий код в консоли диспетчера пакетов.
Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider -IncludePrerelease -Version 2.4.0 Install-Package Microsoft.IdentityModel.Clients.ActiveDirectoryОткройте файл App.config для проекта.
Откройте раздел
<configuration>и добавьте или обновите разделы<configSections>.Если в разделе
<configuration>нет раздела<configSections>, добавьте приведенное ниже содержимое сразу после раздела<configuration>.<configSections> <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections>Если в разделе
<configuration>уже содержится раздел<configSections>, добавьте следующую строку в раздел<configSections>:<section name="SqlColumnEncryptionEnclaveProviders" type="System. Data.SqlClient. SqlColumnEncryptionEnclaveProviderConfigurationSection, System. Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
В разделе
<configuration>под элементом</configSections>добавьте новый раздел, в котором указывается поставщик анклава, используемый для аттестации и взаимодействия с вашим серверным защищённым анклавом.Если вы используете SQL Server и Host Guardian Service (HGS) (если вы используете базу данных из руководства «Начало работы с Always Encrypted с использованием защищённых анклавов в SQL Server»), добавьте раздел ниже.
<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 для простого консольного приложения.
<?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>Если вы используете базу данных Azure SQL с анклавами SGX и Microsoft Аттестация Azure (то есть используете базу данных из статьи Руководство. Начало работы с Always Encrypted с безопасными анклавами Intel SGX в База данных SQL Azure), добавьте приведённый ниже раздел.
<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>Ниже приведен полный пример файла app.config для простого консольного приложения.
<?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>
Шаг 2. Реализация логики приложения
Приложение подключится к базе данных ContosoHR, созданной в одном из руководств, см. Prerequisites, и выполнит запрос, содержащий предикат LIKE для столбца SSN и сравнение по диапазону для столбца Salary.
Замените содержимое файла Program.cs (созданного в Visual Studio) на приведенный ниже код. Обновите строку подключения к базе данных, указав имя сервера, параметры аутентификации базы данных и URL-адрес аттестации анклава для вашей среды.
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(); } } } }Выполните сборку приложения и запустите его.