チュートリアル:セキュリティで保護されたエンクレーブが設定された Always Encrypted を使用して .NET アプリケーションを開発する
適用対象: SQL Server 2019 (15.x) 以降 - Windows のみ Azure SQL Database
適用対象: .NET Framework .NET Core .NET Standard
このチュートリアルでは、セキュリティで保護されたエンクレーブが設定された 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 と統合する必要があります。
Visual Studio を開きます。
新しい C# コンソール アプリ (.NET Framework/Core) プロジェクトを作成します。
プロジェクトのターゲットが .NET Framework 4.6 以降または .NET Core 3.1 以降であることを確認します。 ソリューション エクスプローラーでプロジェクトを右クリックし、 [プロパティ] を選択して、ターゲット フレームワークを設定します。
[ツール] (メイン メニュー) >[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] に移動して、次の NuGet パッケージをインストールします。 パッケージ マネージャー コンソールで次のコードを実行します。
Install-Package Microsoft.Data.SqlClient -Version 5.0.1
Azure Key Vault を使用して列マスター キーを格納する場合は、[ツール] (メイン メニュー) >[NuGet パッケージ マネージャー]>[パッケージ マネージャー コンソール] に移動して、次の NuGet パッケージをインストールします。 パッケージ マネージャー コンソールで次のコードを実行します。
Install-Package Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider -Version 3.0.0 Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
手順 2:アプリケーションのロジックを実装する
このアプリケーションは、チュートリアルの 1 つで作成された ContosoHR データベース (「前提条件」を参照) に接続して、SSN 列に対する LIKE
述語と、Salary に対する範囲比較が含まれるクエリを実行します。
(Visual Studio によって生成された) Program.cs ファイルの内容を、次のコードに置き換えます。
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(); } } } }
データベース接続文字列を更新します。
- 有効なサーバー名とデータベース認証設定を設定します。
- データベースに構成証明を使っている場合は、エンクレーブ構成証明プロトコルを構成証明サービスに対して正しい値 (ホスト ガーディアン サービスの場合は
HGS
、Microsoft Azure Attestation の場合はAAS
) に設定します。 それ以外の場合は、エンクレーブ構成証明プロトコルをNone
に設定します。
アプリケーションをビルドして実行します。
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示