다음을 통해 공유


보안 enclave를 사용하는 Always Encrypted를 사용하여 열에 인덱스 만들기 및 사용하기

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

이 문서에서는 보안 Enclave를 사용한 Always Encrypted에서 Enclave 사용 열 암호화 키를 사용하여 암호화된 열에서 인덱스를 만들고 사용하는 방법을 설명합니다.

보안 Enclave를 사용한 Always Encrypted는 다음을 지원합니다.

  • 결정론적 암호화와 enclave 활성화 키를 사용하여 암호화된 열에 대해 클러스터형 및 비클러스터형 인덱스를 설정할 수 있습니다.
    • 이러한 인덱스는 암호 텍스트를 기반으로 정렬됩니다. 이러한 인덱스에는 특별한 고려 사항이 없습니다. 결정적 암호화를 사용하여 암호화된 열의 인덱스와 동일한 방식으로 관리하고 사용할 수 있습니다(Always Encrypted와 마찬가지로).
  • 임의 암호화 및 Enclave 사용 키를 사용하여 암호화된 열에 대한 비클러스터형 인덱스.
    • 인덱스 데이터 구조(B 트리)의 키 값은 암호화되고 일반 텍스트 값을 기준으로 정렬됩니다. 자세한 내용은 enclave 사용 열의 인덱스를 참조하세요.

참고 항목

이 문서의 나머지 부분에서는 임의 암호화 및 Enclave 사용 키를 사용하여 암호화된 열의 비클러스터형 인덱스에 대해 설명합니다.

임의 암호화 및 enclave 사용 열 암호화 키를 사용하는 열의 인덱스에는 일반 텍스트에 따라 정렬된 암호화된(암호 텍스트) 데이터가 포함되어 있으므로 SQL Server 엔진은 다음을 포함하여 인덱스를 만들거나 업데이트하거나 검색하는 작업을 위해 enclave를 사용해야 합니다.

  • 인덱스 만들기 또는 다시 작성
  • 테이블에서 행을 삽입, 업데이트 또는 삭제(인덱스/암호화된 열 포함)하면 인덱스 키가 인덱스에 삽입 및/또는 인덱스에서 제거되는 것을 트리거합니다.
  • DBCC CHECKDB(Transact-SQL) 또는 DBCC CHECKTABLE(Transact-SQL)과 같이 인덱스의 무결성을 확인하는 DBCC 명령을 실행합니다.
  • 데이터베이스 복구(예: SQL Server가 실패하고 다시 시작한 후), SQL Server가 인덱스에 대한 변경 사항을 되돌려야 할 필요가 있는 경우(자세한 내용은 아래 참조).

위의 모든 작업을 수행하려면 enclave에 인덱싱된 열에 대한 열 암호화 키가 있어야 합니다. 인덱스 키의 암호를 해독하려면 키가 필요합니다. 일반적으로 enclave는 다음 두 가지 방법 중 하나로 열 암호화 키를 가져올 수 있습니다.

  • 클라이언트 애플리케이션에서 직접
  • 열 암호화 키의 캐시에서.

클라이언트에서 직접 제공하는 열 암호화 키를 사용하여 인덱싱 작업 호출

인덱싱 작업을 호출하기 위한 이 방법이 유효하려면 인덱스에서 작업을 트리거하는 쿼리를 실행하는 애플리케이션(예: SSMS(SQL Server Management Studio))이 다음과 같아야 합니다.

  • 데이터베이스 연결 시 항상 암호화와 enclave 계산 모두를 활성화합니다.
  • 애플리케이션은 인덱싱된 열의 열 암호화 키를 보호하는 열 마스터 키에 액세스할 수 있어야 합니다.

SQL Server 엔진이 애플리케이션 쿼리를 구문 분석하고 쿼리를 실행하기 위해 암호화된 열의 인덱스를 업데이트해야 한다고 결정하면, 보안 채널을 통해 필요한 열 암호화 키를 Enclave에 해제하도록 클라이언트 드라이버에 지시합니다. 인덱스를 사용하지 않는 다른 쿼리를 처리하기 위해 Enclave에 열 암호화 키를 제공하는 데 사용되는 것과 동일한 메커니즘입니다. 예를 들어 패턴 일치 및 범위 비교를 사용하는 현재 위치 암호화 또는 쿼리입니다.

이 방법은 Always Encrypted 및 enclave 계산을 사용하도록 설정된 데이터베이스에 이미 연결된 애플리케이션에 암호화된 열에 인덱스가 있는지 확인하는 데 유용합니다. 애플리케이션 연결은 쿼리 처리에 enclave를 사용할 수 있습니다. 열에 인덱스를 만든 후 앱 내의 드라이버는 인덱싱 작업을 위해 enclave에 열 암호화 키를 투명하게 제공합니다. 인덱스를 만들면 애플리케이션이 열 암호화 키를 enclave로 보내야 하는 쿼리 수가 증가할 수 있습니다.

이 방법을 사용하려면 보안 enclave를 사용하여 문을 실행하는 일반 지침 - 보안 enclave를 사용하여 Transact-SQL 문 실행을 따르세요.

이 방법을 사용하는 방법에 대한 단계별 지침은 자습서: 랜덤화된 암호화를 사용하여 enclabe 사용 열에 인덱스를 생성하고 사용을 참조하십시오.

캐시된 열 암호화 키를 사용하여 인덱싱 작업 호출

클라이언트 애플리케이션이 enclave 계산이 필요한 쿼리를 처리하기 위해 enclave에 열 암호화 키를 보내면 enclave는 내부 캐시에 열 암호화 키를 캐시합니다. 이 캐시는 enclave 내부에 있으며 외부에서 액세스할 수 없습니다.

동일하거나 다른 사용자가 사용하는 클라이언트 애플리케이션이 필요한 열 암호화를 직접 제공하지 않고 인덱스에 대한 작업을 트리거하는 경우, enclave는 캐시에서 열 암호화 키를 조회합니다. 결과적으로 클라이언트 애플리케이션에서 키를 제공하지는 않았지만 인덱스에 대한 작업이 성공합니다.

인덱싱 작업을 호출하는 이 방법이 작동하려면 애플리케이션이 연결에 Always Encrypted를 사용하도록 설정하지 않고 데이터베이스에 연결해야 하며 필요한 열 암호화 키를 enclave 내의 캐시에서 사용할 수 있어야 합니다.

이 작업 호출 방법은 인덱스와 관련이 없는 다른 작업에 열 암호화 키가 필요하지 않은 쿼리에 대해서만 지원됩니다. 예를 들어 INSERT 문을 사용하여 암호화된 열을 포함하는 테이블에 행을 삽입하는 애플리케이션은 연결 문자열에서 Always Encrypted를 사용하는 데이터베이스에 연결되어야 하며, 암호화된 열에 인덱스가 있는지 여부와 관계없이 키에 액세스할 수 있어야 합니다.

이 방법은 다음과 같은 경우에 유용합니다.

  • 임의 암호화를 사용하는 enclave 사용 열에 대한 인덱스의 존재가 일반 텍스트로 된 키 및 데이터에 액세스할 수 없는 애플리케이션 및 사용자에게 투명해야 합니다.

  • 암호화된 열에 인덱스를 만들면 기존 쿼리가 중단되지 않습니다. 애플리케이션이 키에 액세스할 필요 없이 암호화된 열이 포함된 테이블에서 쿼리를 실행하는 경우 DBA에서 인덱스를 만든 후에도 키에 액세스하지 않고도 애플리케이션을 계속 실행할 수 있습니다. 예를 들어, 암호화된 열을 포함하는 Employees 테이블에서 아래 쿼리를 실행하는 애플리케이션이 있다고 가정합니다. DBA는 암호화된 열에 인덱스가 생성되지 않았습니다.

    DELETE FROM [dbo].[Employees] WHERE [EmployeeID] = 1;
    GO
    

    애플리케이션이 Always Encrypted 및 enclave 계산을 사용하지 않고 연결을 통해 쿼리를 제출하면 쿼리가 성공합니다. 쿼리는 암호화된 열에 대한 계산을 트리거하지 않습니다. DBA가 암호화된 열에 인덱스를 만든 후에는 쿼리가 인덱스 키 제거를 트리거합니다. enclave에는 이 상황에서 열 암호화 키가 필요합니다. 그러나 데이터 소유자가 enclave에 열 암호화 키를 제공한 경우 애플리케이션이 동일한 연결을 통해 이 쿼리를 계속 실행할 수 있습니다.

  • DBA는 중요한 데이터에 액세스하지 않고도 암호화된 열에서 인덱스를 만들고 변경할 수 있으므로 인덱스를 관리할 때 역할 분리를 달성합니다.

sp_Enclave_send_keys (Transact-SQL)를 사용하면 인덱스에 사용되는 모든 Enclave 사용 열 암호화 키를 Enclave로 쉽게 보내고 키 캐시를 채울 수 있습니다.

이 방법을 사용하는 방법에 대한 단계별 지침은 자습서: 랜덤화된 암호화를 사용하여 enclabe 사용 열에 인덱스를 생성하고 사용을 참조하십시오.

다음 단계

참고 항목