教學課程:使用具有安全記憶體保護區的 Always Encrypted 開發 .NET 應用程式
適用於:SQL Server 2019 (15.x) 及更新版本 - 僅限 Windows Azure SQL 資料庫
適用於: .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 專案
若要在 .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。 以滑鼠右鍵按一下 [方案總管] 中的專案、選取 [屬性],然後設定目標 Framework。
移至 [工具] (主功能表) > [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(); } } } }
更新資料庫連接字串。
- 設定有效的伺服器名稱和您的資料庫驗證設定。
- 如果您使用資料庫的證明,請將記憶體保護區證明通訊協定設定為證明服務的正確值 (針對主機守護者服務為
HGS
或針對 Microsoft Azure 證明為AAS
)。 否則,請將記憶體保護區證明通訊協定設定為None
。
建置並執行應用程式。