자습서: 임의 암호화를 사용하여 enclave 사용 열에서 인덱스 만들기 및 사용
적용 대상: SQL Server 2019(15.x) 이상 - Windows 전용 Azure SQL Database
이 자습서에서는 보안 Enclave를 사용하여 Always Encrypted에서 지원되는 임의 암호화를 사용하여 enclave 사용 열에서 인덱스를 만들고 사용하는 방법을 설명합니다. 다음이 설명됩니다.
- 열을 보호하는 키(열 마스터 키 및 열 암호화 키)에 액세스할 수 있는 경우 인덱스 만들기 방법
- 열을 보호하는 키에 액세스할 수 없을 때 인덱스를 만드는 방법
전제 조건
최신 버전의 SQL Server Management Studio(SSMS)를 다운로드하세요.
이 자습서의 아래 단계를 따르기 전에 보안 Enclave 자습서에서 Always Encrypted 사용을 시작하는 중 하나를 완료했는지 확인합니다.
1단계: 데이터베이스에서 ADR(가속 데이터베이스 복구) 사용
참고 항목
이 단계는 SQL Server만 적용됩니다. Azure SQL Database를 사용하는 경우 이 단계를 건너뜁니다. ADR은 Azure SQL Database에서 자동으로 사용하도록 설정되며 사용하지 않도록 설정할 수 없습니다.
임의 암호화를 사용하여 enclave 사용 열에 첫 번째 인덱스를 만들기 전에 데이터베이스에서 ADR을 사용하도록 설정하는 것이 좋습니다. 보안 enclave를 사용한 Always Encrypted의 데이터베이스 복구 섹션을 참조하세요.
이전 자습서에서 사용한 모든 SSMS 인스턴스를 닫습니다. SSMS를 닫으면 ADR을 사용하도록 설정하는 데 필요한 열린 데이터베이스 연결이 닫힙니다.
SSMS의 새 인스턴스를 열고 데이터베이스 연결에 Always Encrypted를 사용하지 않고 sysadmin으로 SQL Server 인스턴스에 연결합니다.
- SSMS를 시작합니다.
- 서버에 연결 대화 상자에서 서버 이름을 지정하고 인증 방법을 선택하고 자격 증명을 지정합니다.
- 옵션 >> 및 을 선택하고 Always Encrypted 탭을 선택합니다.
- Always Encrypted 사용(열 암호화) 확인란이 선택되어 있지 않은지 확인합니다.
- 연결을 선택합니다.
새 쿼리 창을 열고 아래 문을 실행하여 ADR을 사용하도록 설정합니다.
ALTER DATABASE ContosoHR SET ACCELERATED_DATABASE_RECOVERY = ON;
2단계: 역할 분리 없이 인덱스 만들기 및 테스트
이 단계에서는 암호화된 열에서 인덱스 만들기 및 테스트합니다. 데이터베이스를 관리하는 DBA와 키에 대한 액세스 권한이 있는 데이터 소유자 모두의 역할을 맡아 데이터를 보호하는 단일 사용자 역할을 수행하게 됩니다.
새 SSMS 인스턴스를 열고 데이터베이스 연결에 Always Encrypted를 사용하도록 설정된 SQL Server 인스턴스 에 연결합니다.
- SSMS의 새 인스턴스를 시작합니다.
- 서버에 연결 대화 상자에서 서버 이름을 지정하고 인증 방법을 선택하고 자격 증명을 지정합니다.
- 옵션 >> 및 을 선택하고 Always Encrypted 탭을 선택합니다.
- Always Encrypted 사용(열 암호화) 및 보안 Enclave 사용 확인란 선택
- 데이터베이스에 증명을 사용하는 경우 증명 서비스(호스트 보호 서비스 또는 Microsoft Azure 증명)를 나타내는 Enclave 증명 프로토콜 값을 선택하고 enclave 증명 URL을 채웁니다. 그렇지 않으면 [없음]을 선택합니다.
- 연결을 선택합니다.
- Always Encrypted 쿼리에 대해 매개 변수화를 사용하도록 설정하라는 메시지가 표시되면 [사용]을 선택합니다.
Always Encrypted에 대해 매개 변수화를 사용하도록 설정하라는 메시지가 표시되지 않으면 사용하도록 설정되었는지 확인합니다.
- SSMS의 주 메뉴에서 도구 를 선택합니다.
- 옵션... 을 선택합니다.
- 쿼리 실행>SQL Server>고급으로 이동합니다.
- Always Encrypted에 대해 매개 변수화 사용이 선택되었는지 확인합니다.
- 확인을 선택합니다.
쿼리 창을 열고 아래 문을 실행하여 Employees 테이블의 LastName 열을 암호화합니다 . 이후 단계에서 해당 열에 인덱스 만들기 및 사용합니다.
ALTER TABLE [HR].[Employees] ALTER COLUMN [LastName] [nvarchar](50) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL; GO ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE; GO
LastName 열에 인덱스 만들기 Always Encrypted를 사용하도록 설정된 데이터베이스에 연결되었으므로 SSMS 내의 클라이언트 드라이버는 인덱스를 만드는 데 필요한 Enclave에 CEK1(열 암호화 키, LastName 열 보호)을 투명하게 제공합니다.
CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName]) INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]); GO
LastName 열에서 서식 있는 쿼리를 실행하고 쿼리를 실행할 때 SQL Server에서 인덱스가 사용되는지 확인합니다.
동일한 쿼리 또는 새 쿼리 창에서 도구 모음의 라이브 쿼리 통계 포함 단추가 있는지 확인합니다 .
아래 쿼리를 실행합니다.
DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%'; SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix; GO
라이브 쿼리 통계 탭에서 쿼리가 인덱스를 사용하는지 확인합니다.
3단계: 역할 분리를 사용하여 인덱스 만들기
이 단계에서는 서로 다른 두 사용자로 가장하여 암호화된 열에 인덱스 만들기를 수행합니다. 한 사용자는 인덱스를 만들어야 하지만 키에 액세스할 수 없는 DBA입니다. 다른 사용자는 키에 액세스할 수 있는 데이터 소유자입니다.
Always Encrypted를 사용하지 않고 SSMS 인스턴스를 사용하여 아래 문을 실행하여 LastName 열에 인덱스를 삭제합니다.
DROP INDEX IX_LastName ON [HR].[Employees]; GO
데이터 소유자(또는 키에 대한 액세스 권한이 있는 애플리케이션)로 작동하면 enclave 내부의 캐시를 CEK1로 채웁다.
참고 항목
2단계 이후 SQL Server 인스턴스를 다시 시작하지 않은 경우: 역할 분리 없이 인덱스 만들기 및 테스트는 CEK1이 캐시에 이미 있으므로 중복됩니다. 여기서는 enclave에 키가 없는 경우 데이터 소유자가 enclave에 키를 제공할 수 있는 방법을 보여 주기 위해 추가되었습니다.
Always Encrypted를 사용하도록 설정된 SSMS 인스턴스 에서 쿼리 창에서 아래 문을 실행합니다. 이 문은 enclave 사용 열 암호화 키를 모두 enclave로 보냅니다. 자세한 내용은 sp_enclave_send_keys 참조하세요.
EXEC sp_enclave_send_keys; GO
위의 저장 프로시저를 실행하는 대신 LastName 열에 대해 enclave를 사용하는 DML 쿼리를 실행할 수 있습니다. 이렇게 하면 Enclave가 CEK1로만 채워집니다.
DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%'; SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix; GO
DBA 역할을 하면서 인덱스 만들기
Always Encrypted를 사용하도록 설정하지 않은 SSMS 인스턴스에서 쿼리 창에서 아래 문을 실행합니다.
CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName]) INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]); GO
데이터 소유자로 LastName 열에 대해 풍부한 쿼리를 실행하고, SQL Server에서 쿼리를 실행할 때 인덱스를 사용하는지 확인합니다.
Always Encrypted를 사용하도록 설정된 SSMS 인스턴스에서 기존 쿼리 창을 선택하거나 새 쿼리 창을 열고 도구 모음의 라이브 쿼리 통계 포함 단추가 설정되어 있는지 확인합니다.
아래 쿼리를 실행합니다.
DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%'; SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix; GO
라이브 쿼리 통계에서 쿼리가 인덱스를 사용하는지 확인합니다.
다음 단계
- 자습서: 보안 enclave를 사용한 Always Encrypted를 이용하여 .NET 애플리케이션 개발을 참조하세요.
- 자습서: 보안 enclave를 사용한 Always Encrypted를 이용하여 .NET Framework 애플리케이션 개발
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기