보안 Enclave를 사용한 Always Encrypted에 대한 일반적인 문제 해결

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

이 문서에서는 보안 Enclave를 사용한 Always Encrypted를 사용하여 TSQL(Transact-SQL) 문을 실행할 때 나타날 수 있는 일반적인 문제를 식별하고 해결하는 방법을 설명합니다.

보안 Enclave를 사용하여 쿼리를 실행하는 방법에 대한 자세한 내용은 보안 Enclave를 사용하여 Transact-SQL 문 실행을 참조 하세요.

데이터베이스 연결 오류

보안 enclave를 사용하여 문을 실행하려면 보안 Enclave를 사용하여 문을 실행하기 위한 필수 구성 요소에 설명된 대로 Always Encrypted를 사용하도록 설정하고 증명 프로토콜을 지정하고 데이터베이스 연결에 대한 증명 URL을 지정해야 합니다. 그러나 증명 프로토콜을 지정하지만 Azure SQL Database 또는 대상 SQL Server 인스턴스가 보안 Enclave를 지원하지 않거나 잘못 구성된 경우 연결이 실패합니다.

  • Intel SGX enclave와 함께 Azure SQL Database를 사용하는 경우 데이터베이스가 DC 시리즈 하드웨어 구성을 사용하는지 확인합니다. 자세한 내용은 Azure SQL 데이터베이스에 대한 Intel SGX enclave 사용 설정을 참조하세요.
  • VBS enclave와 함께 Azure SQL Database를 사용하는 경우 preferredEnclaveType 데이터베이스 속성이 VBS로 설정되어 있는지 확인합니다. 자세한 내용은 Azure SQL 데이터베이스에 대해 VBS Enclave 사용 설정을 참조하세요.
  • SQL Server 2019(15.x) 이상을 사용하는 경우 인스턴스에 대해 보안 Enclave가 올바르게 구성되어 있는지 확인합니다. 자세한 내용은 SQL Server에서 보안 Enclave 구성을 참조 하세요.

Microsoft Azure Attestation을 사용하는 경우 증명 오류

참고 항목

이 섹션은 Intel SGX enclave를 사용하는 Azure SQL Database에만 적용됩니다.

클라이언트 드라이버는 실행을 위해 T-SQL 문을 Azure SQL 논리 서버에 제출하기 전에 Microsoft Azure Attestation을 사용하여 다음 Enclave 증명 워크플로를 트리거합니다.

  1. 클라이언트 드라이버는 데이터베이스 연결에 지정된 증명 URL을 Azure SQL 논리 서버에 전달합니다.
  2. Azure SQL 논리 서버는 Enclave, 해당 호스팅 환경 및 Enclave 내에서 실행되는 코드에 대한 증거를 수집합니다. 그런 다음 증명 URL에서 참조되는 증명 공급자에 증명 요청을 보냅니다.
  3. 증명 공급자는 구성된 정책에 대해 증명 정보의 유효성을 검사하고 Azure SQL 논리 서버에 증명 토큰을 발급합니다. 증명 공급자는 프라이빗 키를 사용하여 증명 토큰에 서명합니다.
  4. Azure SQL 논리 서버는 증명 토큰을 클라이언트 드라이버로 보냅니다.
  5. 클라이언트는 지정된 증명 URL에서 증명 공급자에게 연결하여 공개 키를 검색하고 증명 토큰에서 서명을 확인합니다.

잘못된 구성으로 인해 위 워크플로의 다양한 단계에서 오류가 발생할 수 있습니다. 일반적인 증명 오류, 근본 원인 및 권장되는 문제 해결 단계는 다음과 같습니다.

  • Azure SQL 논리 서버가 증명 URL에 지정된 Azure Attestation(위 워크플로의 2단계)의 증명 공급자에 연결할 수 없습니다. 가능한 원인은 다음과 같습니다.
    • 증명 URL이 잘못되었거나 완전하지 않습니다. 자세한 내용은 증명 정책의 증명 URL 확인을 참조하세요.
    • 증명 공급자가 실수로 삭제되었습니다.
    • 방화벽이 증명 공급자에 대해 구성되었지만 Microsoft 서비스에 대한 액세스를 허용하지 않습니다.
    • 일시적인 네트워크 오류로 인해 증명 공급자를 사용할 수 없습니다.
  • Azure SQL 논리 서버는 증명 공급자에게 증명 요청을 보낼 권한이 없습니다. 증명 공급자의 관리자가 증명 판독기 역할에 데이터베이스 서버를 추가했는지 확인합니다.
  • 위의 워크플로의 3단계에서 증명 정책의 유효성 검사가 실패합니다.
    • 잘못된 증명 정책이 근본 원인일 수 있습니다. Microsoft에서 권장하는 정책을 사용하고 있는지 확인합니다. 자세한 내용은 증명 공급자 만들기 및 구성을 참조하세요.
    • 보안 위반으로 인해 서버 쪽 Enclave가 손상된 경우에도 정책 유효성 검사가 실패할 수 있습니다.
  • 클라이언트 애플리케이션이 증명 공급자에 연결하고 공개 서명 키를 검색할 수 없습니다(5단계). 가능한 원인은 다음과 같습니다.
    • 애플리케이션과 증명 공급자 간의 방화벽 구성은 연결을 차단할 수 있습니다. 차단된 연결 문제를 해결하려면 증명 공급자의 OpenId 엔드포인트에 연결할 수 있는지 확인합니다. 예를 들어 애플리케이션을 호스트하는 머신의 웹 브라우저를 사용하여 OpenID 엔드포인트에 연결할 수 있는지 알아봅니다. 자세한 내용은 메타데이터 구성 - Get을 참조하세요.

호스트 보호 서비스를 사용하는 경우 증명 오류

참고 항목

이 섹션은 SQL Server 2019(15.x) 이상에만 적용됩니다.

클라이언트 드라이버가 실행을 위해 SQL Server에 T-SQL 문을 제출하기 전에 드라이버는 HGS(Host Guardian Service)를 사용하여 다음 enclave 증명 워크플로를 트리거합니다.

  1. 클라이언트 드라이버는 SQL Server를 호출하여 증명을 시작합니다.
  2. SQL Server는 enclave, 호스팅 환경 및 enclave 내에서 실행되는 코드에 대한 증거를 수집합니다. SQL Server는 HGS 인스턴스에서 상태 인증서를 요청합니다. SQL Server를 호스팅하는 컴퓨터가 등록되었습니다. 자세한 내용은 호스트 보호 서비스에 컴퓨터 등록을 참조 하세요.
  3. HGS는 증거의 유효성을 검사하고 SQL Server에 상태 인증서를 발급합니다. HGS는 프라이빗 키를 사용하여 상태 인증서에 서명합니다.
  4. SQL Server는 클라이언트 드라이버에 상태 인증서를 보냅니다.
  5. 클라이언트 드라이버는 데이터베이스 연결에 지정된 증명 URL에서 HGS에 연결하여 HGS 공개 키를 검색합니다. 클라이언트 드라이버는 상태 인증서의 서명을 확인합니다.

오류는 잘못된 구성으로 인해 위 워크플로의 다양한 단계에서 발생할 수 있습니다. 다음은 몇 가지 일반적인 증명 오류, 근본 원인 및 권장되는 문제 해결 단계입니다.

  • 간헐적인 네트워크 오류로 인해 SQL Server가 HGS(위 워크플로의 2단계)에 연결할 수 없습니다. 연결 문제를 해결하려면 SQL Server 컴퓨터의 관리자가 컴퓨터가 HGS 컴퓨터에 연결할 수 있는지 확인해야 합니다.
  • 3단계의 유효성 검사가 실패합니다. 유효성 검사 문제를 해결하려면 다음을 수행합니다.
    • SQL Server 컴퓨터 관리자는 클라이언트 애플리케이션 관리자와 협력하여 SQL Server 컴퓨터가 클라이언트 쪽의 증명 URL에서 참조된 인스턴스와 동일한 HGS 인스턴스에 등록되어 있는지 확인해야 합니다.
    • SQL Server 컴퓨터 관리자는 5단계의 지침에 따라 SQL Server 컴퓨터가 성공적으로 증명할 수 있는지 확인해야 합니다. 호스트가 성공적으로 증명할 수 있는지 확인합니다.
  • 클라이언트 애플리케이션이 HGS에 연결하고 공개 서명 키를 검색할 수 없습니다(5단계). 가능한 원인은 다음과 같습니다.
    • 애플리케이션과 증명 공급자 간에 방화벽 중 하나를 구성하면 연결이 차단될 수 있습니다. 앱을 호스팅하는 컴퓨터가 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 문을 참조 하세요.

다음 단계

참고 항목