適用於: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 專案
若要在 .NET Framework 應用程式中使用具有安全記憶體保護區的 Always Encrypted,您必須確定您的應用程式目標為 .NET Framework 4.6.1 或更新版本。 若要在 .NET Core 應用程式中搭配安全記憶體保護區使用 Always Encrypted,您必須確認您的應用程式以 .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:實作您的應用程式邏輯
您的應用程式將會連線到 ContosoHR 資料庫;該資料庫是在其中一個教學課程中建立的,請參閱 必要條件。它將執行一個查詢,其中包含在 SSN 資料行上的 LIKE 謂詞,以及在 Salary 資料行上的範圍比較。
將 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(); } } } }更新資料庫連接字串。
- 設定有效的伺服器名稱和您的資料庫驗證設定。
- 如果您為資料庫使用證明,請將 Enclave 證明通訊協定設為符合您證明服務的正確值(若使用 Host Guardian Service,則為
HGS;若使用 Microsoft Azure 證明,則為AAS)。 否則,請將安全區域認證通訊協定設定為None。
建置並執行應用程式。