Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: Windows
Azure SQL Veritabanı'nda SQL Server 2019 (15.x) ve sonraki sürümleri
Bu öğretici, güvenli kuşatmalarla Always Encrypted için sunucu tarafı güvenli kapanım kullanan veritabanı sorguları veren bir uygulama geliştirmeyi öğretir.
Uyarı
.NET Framework, kanıtlama olmadan VBS kuşatmalarıyla Always Encrypted'ın kullanılmasını desteklemez. Bu öğretici yalnızca Microsoft Azure Doğrulama (Azure SQL Veritabanı'nda Intel SGX yalıtımlarıyla) veya Konak Koruyucu Hizmeti (SQL Server'da VBS yalıtımlarıyla) doğrulama kullanıyorsanız geçerlidir.
Önkoşullar
Bu öğreticideki aşağıdaki adımları uygulamadan önce Güvenli kuşatmalarla Always Encrypted kullanmaya başlama öğreticilerinden birini tamamladığınızdan emin olun.
Visual Studio'ya da ihtiyacınız olacak (sürüm 2022 önerilir) - adresinden https://visualstudio.microsoft.com/indirin. Uygulama geliştirme makinenizin .NET Framework 4.7.2 veya sonraki bir sürümü çalıştırması gerekir.
1. Adım: Visual Studio Projenizi ayarlama
Bir .NET Framework uygulamasında Always Encrypted'ı güvenli kuşatmalarla kullanmak için, uygulamanızın .NET Framework 4.7.2'ye göre oluşturulduğundan ve Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders NuGet ile tümleştirildiğinden emin olmanız gerekir. Ayrıca, sütun ana anahtarınızı Azure Key Vault'ta depolarsanız, uygulamanızı Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider NuGet, sürüm 2.4.0 veya üzeri ile tümleştirmeniz de gerekir.
Visual Studio'yu açın.
Yeni bir C# Konsol Uygulaması (.NET Framework) projesi oluşturun.
Projenizin en az .NET Framework 4.7.2'ye hedeflediğinden emin olun. Çözüm Gezgini'nde projeye sağ tıklayın, Özellikler'i seçin ve Hedef çerçeve'yi .NET Framework 4.7.2 olarak ayarlayın.
Araçlar (ana menü) >NuGet Paket Yöneticisi Paket Yöneticisi>Konsolu'na giderek aşağıdaki NuGet paketini yükleyin. Paket Yöneticisi Konsolu'nda aşağıdaki kodu çalıştırın.
Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders -IncludePrereleaseSütun ana anahtarlarınızı depolamak için Azure Key Vault kullanıyorsanız Araçlar (ana menü) >NuGet Paket Yöneticisi Paket Yöneticisi>Konsolu'na giderek aşağıdaki NuGet paketlerini yükleyin. Paket Yöneticisi Konsolu'nda aşağıdaki kodu çalıştırın.
Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider -IncludePrerelease -Version 2.4.0 Install-Package Microsoft.IdentityModel.Clients.ActiveDirectoryProjeniz için App.config dosyasını açın.
<configuration>bölümünü bulun ve bölümleri ekleyin veya güncelleştirin<configSections>.<configuration>Bölümü içermiyorsa<configSections>, aşağıdaki içeriği hemen altına<configuration>ekleyin.<configSections> <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections>Eğer
<configuration>bölümü zaten<configSections>bölümünü içeriyorsa,<configSections>bölümüne aşağıdaki satırı ekleyin:<section name="SqlColumnEncryptionEnclaveProviders" type="System. Data.SqlClient. SqlColumnEncryptionEnclaveProviderConfigurationSection, System. Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<configuration>bölümünün içine,</configSections>'in altına, sunucu tarafı güvenli kapanımınızı doğrulamak ve onunla etkileşime geçmek için kullanılacak bir kapanım sağlayıcısını belirten yeni bir bölüm ekleyin.SQL Server ve Konak Koruyucu Hizmeti (HGS) kullanıyorsanız ( Öğretici: SQL Server'da güvenli kuşatmalarla Always Encrypted'ı kullanmaya başlama bölümünden veritabanını kullanıyorsanız) aşağıdaki bölümü ekleyin.
<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>Basit bir konsol uygulaması için app.config dosyasının tam bir örneği aşağıda verilmiştir.
<?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 Veritabanı'nı SGX kuşatmalarıyla ve Microsoft Azure Kanıtlama ile kullanıyorsanız ( Öğretici: Azure SQL Veritabanı'nda güvenli Intel SGX kuşatmalarıyla Always Encrypted kullanmaya başlama bölümünden veritabanını kullanıyorsanız) aşağıdaki bölümü ekleyin.
<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>Basit bir konsol uygulaması için app.config dosyasının tam bir örneği aşağıda verilmiştir.
<?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. Adım: Uygulama mantığınızı uygulama
Uygulamanız, öğreticilerden birinde oluşturulan ContosoHR veritabanına bağlanacak ve sütununda LIKE koşulunu içeren bir sorgu ile Maaş sütununda bir aralık karşılaştırması çalıştıracak, ayrıntılar için Önkoşullar bölümüne bakınız.
Program.cs dosyasının içeriğini (Visual Studio tarafından oluşturulan) aşağıdaki kodla değiştirin. Veritabanı bağlantı dizesini sunucu adınız, veritabanı kimlik doğrulama ayarlarınız ve ortamınız için enklav doğrulama URL'si ile güncelleyin.
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(); } } } }Uygulamayı derleyin ve çalıştırın.