자습서: 보안 enclave를 사용한 Always Encrypted를 이용하여 .NET 애플리케이션 개발을 참조하세요.

적용 대상: SQL Server 2019(15.x) 이상 - Windows만 해당 Azure SQL Database

적용 대상: .NET Framework .NET Core Not supported. .NET Standard

이 자습서에서는 보안 enclave를 사용한 Always Encrypted에 대해 서버 쪽 보안 enclave를 사용하는 데이터베이스 쿼리를 실행하는 애플리케이션을 개발하는 방법을 알아봅니다.

필수 조건

이 자습서의 아래 단계를 따르기 전에 보안 Enclave 자습서에서 Always Encrypted 사용을 시작 중에서 하나를 완료했는지 확인합니다.

또한 Visual Studio(버전 2022 권장)가 필요합니다. https://visualstudio.microsoft.com/에서 다운로드할 수 있습니다. 애플리케이션 개발 환경에서 .NET Framework 4.6.1 이상 또는 .NET Core 3.1 이상을 사용해야 합니다.

1단계: Visual Studio 프로젝트 설정

.NET Framework 애플리케이션에서 보안 Enclave와 함께 Always Encrypted를 사용하려면 애플리케이션이 .NET Framework 4.6.1 이상을 대상으로 하는지 확인해야 합니다. .NET Core 애플리케이션에서 보안 Enclave와 함께 Always Encrypted를 사용하려면 애플리케이션이 .NET Core 3.1 이상을 대상으로 하는지 확인해야 합니다.

또한 열 마스터 키를 Azure Key Vault에 저장하는 경우에도 애플리케이션을 Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider NuGet에 통합해야 합니다.

  1. Visual Studio를 엽니다.

  2. 새 C# 콘솔 앱(.NET Framework/Core) 프로젝트를 만듭니다.

  3. 프로젝트가 .NET Framework 4.6 또는 .NET Core 3.1 이상을 대상으로 지정하는지 확인합니다. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택한 후 대상 프레임워크를 설정합니다.

  4. 도구(주 메뉴) >NuGet 패키지 관리자>패키지 관리자 콘솔로 이동하여 다음 NuGet 패키지를 설치합니다. 패키지 관리자 콘솔에서 다음 코드를 실행합니다.

    Install-Package Microsoft.Data.SqlClient -Version 5.0.1
    
  5. 열 마스터 키를 저장하는 데 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 열의 조건자와 Salary 열의 범위 비교가 포함된 LIKE 쿼리를 실행합니다.

  1. 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();
                }
            }
        }
    }
    
  2. 데이터베이스 연결 문자열을 업데이트합니다.

    1. 유효한 서버 이름과 데이터베이스 인증을 설정합니다.
    2. 데이터베이스에 증명을 사용하는 경우 Enclave 증명 프로토콜을 증명 서비스(호스트 보호 서비스의 경우 HGS 또는 Microsoft Azure 증명의 경우 AAS)에 대한 올바른 값으로 설정합니다. 그렇지 않으면 Enclave 증명 프로토콜을 None(으)로 설정합니다.
  3. 애플리케이션을 빌드 및 실행합니다.

참고 항목