보안 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 사용 키를 사용하여 현재 위치 암호화 작업을 트리거하는 ALTER TABLE column_definition(Transact-SQL) 문입니다. 자세한 정보는 보안 Enclave를 사용한 Always Encrypted를 이용하여 내부 열 암호화 구성을 참조하세요.
- 임의 암호화를 사용하여 Enclave 사용 열에서 인덱스를 만들거나 변경하는 CREATE INDEX(Transact-SQL) 및 ALTER INDEX(Transact-SQL) 문입니다. 자세한 정보는 보안 Enclave를 통해 Always Encrypted를 사용하여 열에 인덱스 생성 및 사용을 참조하세요.
보안 Enclave를 사용하는 DML 문
임의 암호화를 사용하는 Enclave 사용 열에 대한 다음 DML(데이터 조작 언어) 문 또는 쿼리에는 보안 Enclave가 필요합니다.
- 보안 Enclave 내에서 지원되는 다음 Transact-SQL 연산자 중 하나 이상을 사용하는 쿼리:
- 비교 연산자
- BETWEEN(Transact-SQL)
- IN(Transact-SQL)
- LIKE(Transact-SQL)
- DISTINCT
- 조인 - SQL Server 2019(15.x)은 중첩된 루프 조인만 지원합니다. SQL Server 2022(16.x) 및 Azure SQL 데이터베이스에서는 중첩된 루프, 해시, 병합 조인을 지원합니다.
- SELECT - ORDER BY 절(Transact-SQL) SQL Server 2022(16.x) 및 Azure SQL 데이터베이스에서 지원됩니다. SQL Server 2019(15.x)에서 지원되지 않음
- SELECT - GROUP BY 절(Transact-SQL). SQL Server 2022(16.x) 및 Azure SQL 데이터베이스에서 지원됩니다. SQL Server 2019(15.x)에서 지원되지 않음
- 행을 삽입, 업데이트 또는 삭제하는 쿼리로, Enclave 사용 열의 인덱스에서 인덱스 키를 삽입 및/또는 제거하도록 트리거합니다. 자세한 정보는 보안 Enclave를 통해 Always Encrypted를 사용하여 열에 인ㅂ덱스 생성 및 사용을 참조하세요.
참고 항목
Enclave를 사용하는 인덱스 및 기밀 DML 쿼리에 대한 작업은 임의 암호화를 사용하는 Enclave 사용 열에서만 지원됩니다. 결정적 암호화는 지원되지 않습니다.
데이터베이스의 호환성 수준은 SQL Server 2022(160) 이상으로 설정되어야 합니다.
Azure SQL 데이터베이스 및 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 데이터베이스의 데이터베이스 서버를 올바르게 구성해야 합니다. 자세한 정보는 보안 Enclave와 증명 설정을 참조하세요.
애플리케이션 또는 도구(예: SQL Server Management Studio)에서 데이터베이스에 연결하는 경우 다음을 확인합니다.
보안 Enclave를 사용하여 Always Encrypted를 지원하는 클라이언트 드라이버 버전 또는 도구 버전을 사용합니다.
- 보안 Enclave로 Always Encrypted를 지원하는 클라이언트 드라이버에 대해 자세한 정보는 Always Encrypted를 사용하는 애플리케이션 개발을 참조하세요.
- 보안 Enclave를 사용한 Always Encrypted를 지원하는 도구에 대한 자세한 정보는 다음 섹션을 참조하세요.
데이터베이스 연결을 위한 Always Encrypted을 사용합니다.
Enclave 쿼리를 제출하기 전에 애플리케이션 또는 도구가 Enclave를 증명해야 하는지 여부와 사용해야 하는 증명 서비스를 결정하는 증명 프로토콜을 지정합니다. 대부분의 도구와 드라이버는 다음과 같은 증명 프로토콜을 지원합니다.
- Microsoft Azure Attestation - Microsoft Azure Attestation을 이용한 증명을 집행합니다.
- 호스트 보호 서비스 - 호스트 보호 서비스를 사용하여 증명을 적용합니다.
- None - 증명 없이 Enclave를 사용할 수 있습니다.
아래 표에서는 특정 SQL 제품 및 Enclave 기술에 유효한 증명 프로토콜을 지정합니다.
Product Enclave 기술 지원되는 증명 프로토콜 SQL Server 2019(15.x) 이상 VBS Enclave 호스트 보호 서비스, None Azure SQL Database SGX Enclave(DC 시리즈 데이터베이스) Microsoft Azure Attestation Azure SQL Database VBS Enclave None
증명을 사용하는 경우 사용자 환경에 유효한 증명 URL을 지정합니다.
- SQL Server 및 HGS(호스트 보호 서비스)를 사용하는 경우 HGS 증명 URL 확인 및 공유를 참조하세요.
- Intel SGX Enclave 및 Microsoft Azure Attestation와 함께 Azure SQL 데이터베이스를 사용하는 경우 증명 정책의 증명 URL 결정을 참조하세요.
SSMS에서 Enclave를 사용하여 T-SQL 문을 실행하기 위한 필수 조건
최신 버전의 SQL Server Management Studio(SSMS)를 다운로드하세요.
Always Encrypted 및 올바른 증명 매개 변수가 구성되어 있는 연결을 사용하는 쿼리 창에서 문을 실행해야 합니다.
서버에 연결 대화 상자에서 서버 이름을 지정하고 인증 방법을 선택하고 자격 증명을 지정합니다.
옵션>>을 선택하고 연결 속성 탭을 선택합니다. 데이터베이스 이름을 지정합니다.
Always Encrypted 탭을 선택합니다.
Always Encrypted(열 암호화)를 선택합니다.
보안 Enclave 사용을 선택합니다.
프로토콜 설정:
- SQL Server 사용 시 호스트 보호 서비스).
- Intel SGX Enclaves와 Azure SQL 데이터베이스를 사용하고 있다면 Microsoft Azure Attestation.
- VBS Enclave와 함께 Azure SQL 데이터베이스를 사용하는 경우 None
Enclave 증명 URL을 지정합니다. 프로토콜이 None으로 설정된 경우에는 적용되지 않습니다. 예를 들어
https://hgs.bastion.local/Attestation
또는https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave
입니다.연결을 선택합니다.
Always Encrypted 쿼리에 대해 매개 변수화를 사용하도록 설정하라는 메시지가 표시되면 사용을 선택합니다.
자세한 정보는 데이터베이스 연결에 Always Encrypted 사용 및 사용 안 함을 참조하세요.
Azure Data Studio에서 enclave를 사용하여 T-SQL 문을 실행하기 위한 필수 조건
최소 권장 버전 1.23 이상이 권장됩니다. Always Encrypted 및 올바른 증명 프로토콜과 증명 URL이 모두 구성되어 있는 연결을 사용하는 쿼리 창에서 문을 실행해야 합니다.
연결 대화 상자에서 고급...을 선택합니다.
연결에 Always Encrypted를 사용하도록 설정하려면 Always Encrypted 필드를 사용으로 설정합니다.
보안 Enclave를 사용하도록 설정하려면 보안 Enclave 필드를 사용으로 설정합니다.
증명 프로토콜 및 증명 URL을 지정합니다.
- SQL Server를 사용하는 경우 증명 프로토콜을 호스트 보호 서비스로 설정하고 Enclave 증명 URL 필드에 호스트 보호 서비스 증명 URL을 입력합니다.
- Azure SQL 데이터베이스에서 Intel SGX와 함께 DC 시리즈 데이터베이스를 사용하는 경우 증명 프로토콜을 Azure Attestation으로 설정하고 증명 URL을 입력하여 Enclave 증명 URL 필드의 Microsoft Azure Attestation에서 정책을 참조합니다.
- Azure SQL 데이터베이스에서 VBS Enclave를 사용하도록 설정된 데이터베이스를 사용하는 경우 증명 프로토콜을 None으로 설정합니다.
OK를 선택하여 고급 속성을 닫습니다.
자세한 정보는 데이터베이스 연결에 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
열을 사용하여 Employees
와 Jobs
테이블 간 조인을 수행합니다. 이 쿼리는 직원의 직무에 대한 급여 범위를 벗어난 급여를 가진 직원을 검색합니다.
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 데이터베이스에서 지원되지만 SQL Server 2019(15.x)에서는 지원되지 않습니다.
SELECT TOP(10) * FROM [HR].[Employees]
ORDER BY [Salary] DESC;
GO