보안 Enclave를 사용하여 Transact-SQL 문 실행

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

보안 enclave를 사용한 Always Encrypted를 사용하면 T-SQL(Transact-SQL) 문이 서버 쪽 보안 enclave의 암호화된 데이터베이스 열에서 기밀 계산을 수행할 수 있습니다.

보안 enclave를 사용하는 문

다음 유형의 T-SQL 문은 보안 Enclave를 활용합니다.

보안 Enclave를 사용하는 DDL 문

다음 유형의 DDL(데이터 정의 언어) 문에는 보안 Enclave가 필요합니다.

보안 Enclave를 사용하는 DML 문

임의 암호화를 사용하는 enclave 사용 열에 대한 다음 DML(데이터 조작 언어) 문 또는 쿼리에는 보안 Enclave가 필요합니다.

  • 보안 Enclave 내에서 지원되는 다음 Transact-SQL 연산자 중 하나 이상을 사용하는 쿼리:
  • 행을 삽입, 업데이트 또는 삭제하는 쿼리로, enclave 사용 열의 인덱스에서 인덱스 키를 삽입 및/또는 제거하도록 트리거합니다. 자세한 내용은 보안 enclave와 함께 Always Encrypted를 사용하여 열에 대한 인덱스 만들기 및 사용을 참조 하세요.

참고 항목

enclave를 사용하는 인덱스 및 기밀 DML 쿼리에 대한 작업은 임의 암호화를 사용하는 enclave 사용 열에서만 지원됩니다. 결정적 암호화는 지원되지 않습니다.

데이터베이스의 호환성 수준은 SQL Server 2022(160) 이상으로 설정해야 합니다.

Azure SQL Database 및 SQL Server 2022(16.x)에서 문자열 열(char, nchar)에 enclave를 사용하는 기밀 쿼리는 열에서 이진 코드 지점(_BIN2) 데이터 정렬 또는 UTF-8 데이터 정렬을 사용해야 합니다. SQL Server 2019(15.x)에서는 a_BIN2 데이터 정렬이 필요합니다.

보안 enclave를 사용하는 DBCC 명령

데이터베이스에 임의 암호화를 사용하는 enclave 사용 열에 인덱스가 포함된 경우 인덱스의 무결성을 검사 관련 DBCC(Transact-SQL) 관리 명령도 보안 enclave가 필요할 수 있습니다. 예를 들어 DBCC CHECKDB(Transact-SQL)DBCC CHECKTABLE(Transact-SQL)입니다.

보안 Enclave를 사용하여 문을 실행하기 위한 필수 구성 요소

사용자 환경은 보안 Enclave를 사용하는 실행 문을 지원하기 위해 다음 요구 사항을 충족해야 합니다.

  • 해당/필요한 경우 Enclave 및 증명을 지원하도록 SQL Server 인스턴스 또는 Azure SQL Database의 데이터베이스 서버를 올바르게 구성해야 합니다. 자세한 내용은 보안 Enclave 및 증명 설정을 참조하세요.

  • 애플리케이션 또는 도구(예: SQL Server Management Studio)에서 데이터베이스에 연결하는 경우 다음을 확인합니다.

    • 보안 Enclave를 사용하여 Always Encrypted를 지원하는 클라이언트 드라이버 버전 또는 도구 버전을 사용합니다.

    • 데이터베이스 연결에 Always Encrypted를 사용하도록 설정합니다.

    • enclave 쿼리를 제출하기 전에 애플리케이션 또는 도구가 enclave를 증명해야 하는지 여부와 사용해야 하는 증명 서비스를 결정하는 증명 프로토콜을 지정합니다. 대부분의 도구와 드라이버는 다음과 같은 증명 프로토콜을 지원합니다.

      • Microsoft Azure Attestation - Microsoft Azure Attestation을 사용하여 증명을 적용합니다.
      • 호스트 보호 서비스 - 호스트 보호 서비스를 사용하여 증명을 적용합니다.
      • 없음 - 증명 없이 enclave를 사용할 수 있습니다.

      아래 표에서는 특정 SQL 제품 및 enclave 기술에 유효한 증명 프로토콜을 지정합니다.

      Product Enclave 기술 지원되는 증명 프로토콜
      SQL Server 2019(15.x) 이상 VBS enclave 호스트 보호자 서비스, 없음
      Azure SQL Database SGX enclave(DC 시리즈 데이터베이스) Microsoft Azure Attestation
      Azure SQL Database VBS enclave 없음
  • 증명을 사용하는 경우 사용자 환경에 유효한 증명 URL을 지정합니다.

SSMS에서 enclave를 사용하여 T-SQL 문을 실행하기 위한 필수 구성 요소

최신 버전의 SQL Server Management Studio(SSMS)를 다운로드하세요.

Always Encrypted 및 증명 매개 변수가 올바르게 구성된 연결을 사용하는 쿼리 창에서 문을 실행해야 합니다.

  1. 서버로 커넥트 대화 상자에서 서버 이름을 지정하고 인증 방법을 선택하고 자격 증명을 지정합니다.

  2. 옵션을 >> 선택하고 커넥트 속성 탭을 선택합니다. 데이터베이스 이름을 지정합니다.

  3. Always Encrypted 탭을 선택합니다.

  4. Always Encrypted 사용(열 암호화)을 선택합니다.

  5. 보안 Enclave 사용을 선택합니다.

  6. 프로토콜을 다음으로 설정합니다.

    1. SQL Server를 사용하는 경우 보호 서비스를 호스트합니다.
    2. Intel SGX enclave와 함께 Azure SQL Database를 사용하는 경우 Microsoft Azure Attestation
    3. VBS Enclave와 함께 Azure SQL Database를 사용하는 경우 없음
  7. Enclave 증명 URL을 지정합니다. 프로토콜이 없음으로 설정된 경우에는 적용되지 않습니다. 예를 들어 https://hgs.bastion.local/Attestation 또는 https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave입니다.

    Connect to server with attestation using SSMS

  8. 연결을 선택합니다.

  9. Always Encrypted 쿼리에 대해 매개 변수화를 사용하도록 설정하라는 메시지가 표시되면 사용을 선택합니다.

자세한 내용은 데이터베이스 연결에 대해 Always Encrypted 사용 및 비활성화를 참조 하세요.

Azure Data Studio에서 enclave를 사용하여 T-SQL 문을 실행하기 위한 필수 조건

최소 권장 버전 1.23 이상이 권장됩니다. Always Encrypted가 사용하도록 설정된 연결과 올바른 증명 프로토콜 및 구성된 증명 URL을 모두 사용하는 쿼리 창에서 문을 실행해야 합니다.

  1. 커넥트 대화 상자에서 고급...을 선택합니다.

  2. 연결에 Always Encrypted를 사용하도록 설정하려면 Always Encrypted 필드를 사용으로 설정합니다.

  3. 보안 Enclave를 사용하도록 설정하려면 보안 enclave 필드를 사용으로 설정합니다.

  4. 증명 프로토콜 및 증명 URL을 지정합니다.

    • SQL Server 집합 증명 프로토콜을 사용하여 보호 서비스를 호스트하는 경우 Enclave 증명 URL 필드에 호스트 보호 서비스 증명 URL을 입력합니다.
    • Azure SQL Database에서 Intel SGX와 함께 DC 시리즈 데이터베이스를 사용하는 경우 증명 프로토콜을 Azure Attestation으로 설정하고 증명 URL을 입력하여 Enclave 증명 URL 필드의 Microsoft Azure Attestation에서 정책을 참조합니다.
    • Azure SQL Database에서 VBS Enclave를 사용하도록 설정된 데이터베이스를 사용하는 경우 증명 프로토콜을 None으로 설정합니다.

    Connect to server with attestation using Azure Data Studio

  5. 확인을 선택하여 고급 속성을 닫습니다.

자세한 내용은 데이터베이스 연결에 대해 Always Encrypted 사용 및 비활성화를 참조 하세요.

매개 변수가 있는 DML 쿼리를 실행하려는 경우 Always Encrypted에 대해 매개 변수화를 사용하도록 설정해야 합니다.

예제

이 섹션에는 enclave를 사용하는 DML 쿼리의 예가 포함되어 있습니다.

예제에서는 아래 스키마를 사용합니다.

CREATE SCHEMA [HR];
GO

CREATE TABLE [HR].[Jobs](
 [JobID] [int] IDENTITY(1,1) PRIMARY KEY,
 [JobTitle] [nvarchar](50) NOT NULL,
 [MinSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
 [MaxSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
);
GO

CREATE TABLE [HR].[Employees](
 [EmployeeID] [int] IDENTITY(1,1) PRIMARY KEY,
 [SSN] [char](11) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
 [FirstName] [nvarchar](50) NOT NULL,
 [LastName] [nvarchar](50) NOT NULL,
 [Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
 [JobID] [int] NULL,
 FOREIGN KEY (JobID) REFERENCES [HR].[Jobs] (JobID)
);
GO

아래 쿼리는 암호화된 SSN 문자열 열에서 정확한 일치 검색을 수행합니다.

DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO

아래 쿼리는 암호화된 SSN 문자열 열에서 패턴 일치 검색을 수행하여 사회 보장 번호의 지정된 마지막 자릿수를 사용하는 직원을 검색합니다.

DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO

범위 비교

아래 쿼리는 암호화된 Salary 열에서 범위 비교를 수행하여 급여가 지정된 범위 내에 있는 직원을 검색합니다.

DECLARE @MinSalary money = 40000;
DECLARE @MaxSalary money = 45000;
SELECT * FROM [HR].[Employees] WHERE [Salary] > @MinSalary AND [Salary] < @MaxSalary;
GO

조인

아래 쿼리는 암호화된 Salary 열을 사용하여 테이블 간 JobsEmployees 조인을 수행합니다. 이 쿼리는 직원의 직무에 대한 급여 범위를 벗어난 급여를 가진 직원을 검색합니다.

SELECT * FROM [HR].[Employees] e
JOIN [HR].[Jobs] j
ON e.[JobID] = j.[JobID] AND e.[Salary] > j.[MaxSalary] OR e.[Salary] < j.[MinSalary];
GO

정렬

아래 쿼리는 암호화된 Salary 열을 기준으로 직원 레코드를 정렬하여 가장 높은 급여를 받는 직원 10명을 검색합니다.

참고 항목

암호화된 열 정렬은 SQL Server 2022(16.x) 및 Azure SQL Database에서 지원되지만 SQL Server 2019(15.x)에서는 지원되지 않습니다.

SELECT TOP(10) * FROM [HR].[Employees]
ORDER BY [Salary] DESC;
GO

다음 단계

참고 항목