보안 Enclave를 사용한 Always Encrypted에 대한 일반적인 문제 해결
적용 대상: SQL Server 2019(15.x) 이상 - Windows만 해당 Azure SQL 데이터베이스
이 문서에서는 보안 Enclave를 사용한 Always Encrypted를 사용하여 TSQL(Transact-SQL) 문을 실행할 때 나타날 수 있는 일반적인 문제를 식별하고 해결하는 방법을 설명합니다.
보안 Enclave를 사용하여 쿼리를 실행하는 방법에 대한 자세한 내용은 보안 Enclave를 사용하여 Transact-SQL 문 실행을 참조하세요.
데이터베이스 연결 오류
보안 Enclave를 사용하여 문을 실행하려면 보안 Enclave를 사용하여 문을 실행하기 위한 필수 조건에 설명된 대로 Always Encrypted를 사용하도록 설정하고 데이터베이스 연결을 위한 증명 프로토콜을 지정하고 해당하는 경우 증명 URL을 지정해야 합니다. 그러나 증명 프로토콜을 지정했지만 Azure SQL 데이터베이스 또는 대상 SQL Server 인스턴스가 보안 Enclave를 지원하지 않거나 잘못 구성된 경우 연결이 실패합니다.
- Intel SGX enclave와 함께 Azure SQL 데이터베이스를 사용하는 경우 데이터베이스가 DC 시리즈 하드웨어 구성을 사용하는지 확인합니다. 자세한 내용은 Azure SQL 데이터베이스에 대한 Intel SGX Enclave 사용 설정을 참조하세요.
- VBS Enclave와 함께 Azure SQL 데이터베이스를 사용하는 경우 preferredEnclaveType 데이터베이스 속성이 VBS로 설정되어 있는지 확인합니다. 자세한 내용은 Azure SQL 데이터베이스에 대한 VBS Enclave 사용 설정을 참조하세요.
- SQL Server 2019(15.x) 이상을 사용하는 경우 인스턴스에 대해 보안 Enclave가 올바르게 구성되어 있는지 확인합니다. 자세한 내용은 SQL Server의 보안 Enclave 구성를 참조하세요.
Microsoft Azure Attestation을 사용하는 경우 증명 오류
참고 항목
이 섹션은 Intel SGX Enclave를 사용하는 Azure SQL 데이터베이스에만 적용됩니다.
클라이언트 드라이버는 실행을 위해 T-SQL 문을 Azure SQL 논리 서버에 제출하기 전에 Microsoft Azure Attestation을 사용하여 다음 Enclave 증명 워크플로를 트리거합니다.
- 클라이언트 드라이버는 데이터베이스 연결에 지정된 증명 URL을 Azure SQL 논리 서버에 전달합니다.
- Azure SQL 논리 서버는 Enclave, 해당 호스팅 환경 및 Enclave 내에서 실행되는 코드에 대한 증거를 수집합니다. 그런 다음 증명 URL에서 참조되는 증명 공급자에 증명 요청을 보냅니다.
- 증명 공급자는 구성된 정책에 대해 증명 정보의 유효성을 검사하고 Azure SQL 논리 서버에 증명 토큰을 발급합니다. 증명 공급자는 프라이빗 키를 사용하여 증명 토큰에 서명합니다.
- Azure SQL 논리 서버는 증명 토큰을 클라이언트 드라이버로 보냅니다.
- 클라이언트는 지정된 증명 URL의 증명 공급자에 연결하여 퍼블릭 키를 검색하고 증명 토큰에서 서명을 확인합니다.
잘못된 구성으로 인해 상기 워크플로의 여러 단계에서 오류가 발생할 수 있습니다. 일반적인 증명 오류, 근본 원인 및 권장되는 문제 해결 단계는 다음과 같습니다.
- Azure SQL 논리 서버가 증명 URL에 지정된 Azure Attestation(위 워크플로의 2단계)의 증명 공급자에 연결할 수 없습니다. 가능한 원인에는 다음이 포함됩니다.
- 증명 URL이 잘못되었거나 완전하지 않습니다. 자세한 내용은 증명 정책의 증명 URL 확인을 참조하세요.
- 증명 공급자가 실수로 삭제되었습니다.
- 방화벽이 증명 공급자에 대해 구성되었지만 Microsoft 서비스에 대한 액세스를 허용하지 않습니다.
- 일시적인 네트워크 오류로 인해 증명 공급자를 사용할 수 없습니다.
- 증명 요청을 증명 공급자에 보낼 수 있는 권한이 Azure SQL 논리 서버에 없습니다. 증명 공급자의 관리자가 Attestation Reader 역할에 데이터베이스 서버를 추가했는지 확인합니다.
- 상기 워크플로의 3단계에서 증명 정책의 유효성 검사에 실패합니다.
- 잘못된 증명 정책이 근본 원인일 수 있습니다. Microsoft에서 권장하는 정책을 사용하고 있는지 확인합니다. 자세한 내용은 증명 공급자 만들기 및 구성을 참조하세요.
- 보안 위반으로 인해 서버 쪽 Enclave가 손상된 경우에도 정책 유효성 검사가 실패할 수 있습니다.
- 5단계에서 클라이언트 애플리케이션이 증명 공급자에 연결하고 공개 서명 키를 검색할 수 없습니다. 가능한 원인에는 다음이 포함됩니다.
- 애플리케이션과 증명 공급자 간에 방화벽을 구성하면 연결이 차단될 수 있습니다. 차단된 연결 문제를 해결하려면 증명 공급자의 OpenId 엔드포인트에 연결할 수 있는지 확인합니다. 예를 들어 애플리케이션을 호스트하는 머신의 웹 브라우저를 사용하여 OpenID 엔드포인트에 연결할 수 있는지 알아봅니다. 자세한 내용은 메타데이터 구성 - Get을 참조하세요.
호스트 보호 서비스를 사용하는 경우 증명 오류
참고 항목
이 섹션은 SQL Server 2019(15.x) 이상에만 해당됩니다.
클라이언트 드라이버는 실행을 위해 T-SQL 문을 SQL Server에 제출하기 전에 HGS(호스트 보호 서비스)를 사용하여 다음 Enclave 증명 워크플로를 트리거합니다.
- 클라이언트 드라이버는 SQL Server를 호출하여 증명을 시작합니다.
- SQL Server는 Enclave, 해당 호스팅 환경 및 Enclave 내에서 실행되는 코드에 대한 증거를 수집합니다. SQL Server는 SQL Server를 호스팅하는 컴퓨터가 등록된 HGS 인스턴스에서 상태 인증서를 요청합니다. 자세한 내용은 호스트 보호 서비스에 컴퓨터 등록을 참조하세요.
- HGS는 증거의 유효성을 검사하고 SQL Server에 상태 인증서를 발급합니다. HGS는 프라이빗 키를 사용하여 상태 인증서에 서명합니다.
- SQL Server는 클라이언트 드라이버에 상태 인증서를 보냅니다.
- 클라이언트 드라이버는 데이터베이스 연결에 지정된 증명 URL에서 HGS에 연결하여 HGS 공개 키를 검색합니다. 클라이언트 드라이버는 상태 인증서의 서명을 확인합니다.
잘못된 구성으로 인해 상기 워크플로의 여러 단계에서 오류가 발생할 수 있습니다. 다음은 몇 가지 일반적인 증명 오류, 근본 원인 및 권장되는 문제 해결 단계입니다.
- 간헐적인 네트워크 오류로 인해 SQL Server가 HGS(상기 워크플로의 2단계)에 연결할 수 없습니다. 연결 문제를 해결하려면 SQL Server 컴퓨터의 관리자가 컴퓨터가 HGS 컴퓨터에 연결할 수 있는지 확인해야 합니다.
- 3단계의 유효성 검사가 실패합니다. 유효성 검사 문제를 해결하려면 다음을 수행합니다.
- SQL Server 컴퓨터 관리자가 클라이언트 애플리케이션 관리자와 협력하여, SQL Server 컴퓨터가 클라이언트 쪽의 증명 URL에서 참조되는 인스턴스와 동일한 HGS 인스턴스로 등록되었는지 확인해야 합니다.
- SQL Server 컴퓨터 관리자가 SQL Server 컴퓨터가 성공적으로 증명할 수 있는지 확인해야 합니다. 이때 5단계: 호스트가 성공적으로 증명할 수 있는지 확인의 지침을 따릅니다.
- 5단계에서 클라이언트 애플리케이션이 HGS에 연결하고 공개 서명 키를 검색할 수 없습니다. 가능한 원인은 다음과 같습니다.
- 애플리케이션과 증명 공급자 간에 방화벽 중 하나를 구성하면 연결이 차단될 수 있습니다. 앱을 호스팅하는 컴퓨터가 HGS 컴퓨터에 연결할 수 있는지 확인합니다.
현재 위치 암호화 오류
이 섹션에서는 현재 위치 암호화에 ALTER TABLE
/ALTER COLUMN
를 사용할 때 발생할 수 있는 일반적인 오류(이전 섹션에서 설명한 증명 오류 이외)를 나열합니다. 더 자세한 내용은 보안 enclave를 사용한 Always Encrypted를 이용하여 내부 열 암호화 구성을 참조하세요.
- 데이터를 암호화, 암호 해독 또는 다시 암호화하는 데 사용하려는 열 암호화 키는 Enclave 사용 키가 아닙니다. 현재 위치 암호화의 필수 구성 요소에 대한 자세한 내용은 필수 구성 요소를 참조하세요. Enclave 사용 키를 프로비전하는 방법에 대한 자세한 내용은 Enclave 사용 키 프로비전을 참조하세요.
- 데이터베이스 연결을 위한 Always Encrypted 및 Enclave 계산을 사용하도록 설정하지 않았습니다. 보안 Enclave를 사용하여 문을 실행하기 위한 필수 조건을 참조하세요.
ALTER TABLE
/ALTER COLUMN
문이 암호화 작업을 트리거하고 열 데이터 형식을 변경하거나 현재 데이터 정렬 코드 페이지와 다른 코드 페이지를 사용하여 데이터 정렬을 설정합니다. 암호화 작업을 데이터 형식 또는 데이터 정렬 페이지 변경 내용과 결합하는 것은 허용되지 않습니다. 문제를 해결하려면 별도의 문을 사용합니다. 하나는 데이터 형식 또는 데이터 정렬 코드 페이지를 변경하기 위한 문이고, 다른 하나는 바로 암호화를 위한 문입니다.
보안 Enclave를 사용하여 기밀 DML 쿼리를 실행할 때 오류 발생
이 섹션에는 이전 섹션에서 설명한 증명 오류 외에도 보안 Enclave를 사용하여 기밀 DML 쿼리를 실행할 때 발생할 수 있는 일반적인 오류를 나열되어 있습니다.
- 쿼리하는 열에 대해 구성된 열 암호화 키는 Enclave 사용 키가 아닙니다.
- 데이터베이스 연결을 위한 Always Encrypted 및 Enclave 계산을 사용하도록 설정하지 않았습니다. 자세한 정보는 보안 Enclave를 사용하여 문을 실행하기 위한 필수 구성 요소를 참조하세요.
- 쿼리하는 열은 결정적 암호화를 사용합니다. 보안 Enclave를 사용하는 기밀 DML 쿼리는 결정적 암호화에서 지원되지 않습니다. 암호화 유형을 임의로 변경하는 방법에 대한 자세한 내용은 기존 암호화된 열에 대한 보안 Enclave를 사용한 Always Encrypted 사용을 참조하세요.
- 쿼리하는 문자열 열은 BIN2 또는 UTF-8 데이터 정렬이 아닌 데이터 정렬을 사용합니다. 데이터 정렬을 BIN2 또는 UTF-8로 변경합니다. 자세한 정보는 보안 Enclave를 사용하는 DML 문을 참조하세요.
- 쿼리가 지원되지 않는 작업을 트리거합니다. Enclave 내에서 지원되는 작업 목록은 보안 Enclave를 사용하는 DML 문을 참조하세요.