Always Encrypted - 암호화된 열에 대한 쿼리 작동 방식
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
암호화된 데이터베이스 열에서 쿼리를 실행하려면 이러한 열에 데이터를 삽입하거나, 일반 텍스트 값을 검색하거나, 결정적 암호화를 사용하여 지원되는 작업(예: 지점 조회 검색)을 수행하려면 쿼리를 실행하는 사용자 또는 애플리케이션이 다음 필수 조건을 충족해야 합니다.
- 데이터를 보호하는 열 마스터 키에 액세스할 수 있습니다. 이 키 액세스는 관련 테이블의 SELECT와 같은 데이터베이스 수준 권한 외에도 필요합니다.
- 데이터베이스 연결에서 Always Encrypted를 사용하도록 설정된 데이터베이스에 연결합니다. 대부분의 SQL 도구 및 SQL 클라이언트 드라이버는 데이터베이스 연결에 Always Encrypted를 사용하도록 설정하도록 지원합니다.
참고 항목
사용자에게 데이터를 읽을 데이터베이스 권한이 필요하지만 데이터를 보호하는 키에 액세스할 수 없는 경우 데이터베이스 연결에서 Always Encrypted를 사용하도록 설정하지 않고 데이터베이스에 연결하여 암호화된 데이터를 검색할 수 있습니다.
암호화된 열에 대한 쿼리가 작동하는 방법은 다음과 같습니다.
- 애플리케이션에서 매개 변수가 있는 쿼리를 실행하면 애플리케이션 내의 SQL 클라이언트 드라이버는 암호화된 열을 대상으로 하고 암호화해야 하는 매개 변수를 결정하기 위해 sp_describe_parameter_encryption 호출하여 데이터베이스 엔진 투명하게 연결합니다. 암호화해야 하는 각 매개 변수에 대해 드라이버는 암호화된 열 암호화 키 및 해당 열 마스터 키의 위치를 포함하여 암호화 알고리즘, 암호화 유형 및 키 메타데이터를 받습니다.
- 드라이버는 암호화된 열 암호화 키 값을 해독하기 위해 열 마스터 키를 포함하는 키 저장소를 호출합니다. 그 결과인 일반 텍스트 열 암호화 키는 캐시되어 동일한 열 암호화 키를 나중에 사용할 때 키 저장소로의 왕복 횟수를 줄입니다.
- 드라이버는 가져온 일반 텍스트 열 암호화 키를 사용하여 암호화된 열에 해당하는 쿼리 매개 변수를 암호화합니다.
- 드라이버는 암호화된 열을 대상으로 하는 매개 변수의 일반 텍스트 값을 암호화된 값으로 대체하고 처리를 위해 쿼리를 데이터베이스 엔진으로 보냅니다.
- 데이터베이스 엔진은 결정적 암호화를 사용하여 열에 대한 같음 비교를 포함할 수 있는 쿼리를 실행합니다.
- 쿼리 결과에 암호화된 열의 데이터가 포함된 경우 데이터베이스 엔진은 암호화 알고리즘, 암호화 유형 및 키 메타데이터에 대한 정보를 포함하여 각 열에 대한 암호화 메타데이터를 결과 집합에 연결합니다.
- 데이터베이스 엔진은 결과 집합을 클라이언트 애플리케이션으로 보냅니다.
- 수신된 결과 집합의 암호화된 각 열에 대해 드라이버는 먼저 로컬 캐시에서 일반 텍스트 열 암호화 키를 찾으려고 시도하고, 캐시에서 키를 찾을 수 없는 경우에만 열 마스터 키를 보유하는 키 저장소로 왕복합니다.
- 드라이버는 결과를 암호 해독하고 일반 텍스트 값을 애플리케이션에 반환합니다.
클라이언트 드라이버는 열 마스터 키가 포함된 키 저장소를 캡슐화하는 클라이언트 쪽 소프트웨어 구성 요소인 열 마스터 키 저장소 공급자를 사용하여 열 마스터 키가 포함된 키 저장소와 상호 작용합니다. 일반 유형의 키 저장소에 대한 공급자는 Microsoft의 클라이언트 쪽 드라이버 라이브러리에서나 독립 실행형 다운로드로 사용할 수 있습니다. 또한 사용자 고유의 공급자를 구현할 수 있습니다. 기본 제공 열 마스터 키 저장소 공급자를 포함하여 Always Encrypted 기능은 드라이버 라이브러리와 해당 버전에 따라 다릅니다.
Always Encrypted를 지원하는 클라이언트 드라이버 목록 및 암호화된 열을 쿼리하는 애플리케이션을 개발하는 방법에 대한 자세한 내용은 Always Encrypted를 사용하여 애플리케이션 개발을 참조하세요.
SQL 도구를 사용하여 암호화된 열을 쿼리할 수도 있습니다. 예를 들어 Azure Data Studio 에서 Always Encrypted를 사용하는 열 쿼리 또는 SQL Server Management Studio에서 Always Encrypted를 사용하는 쿼리 열도 있습니다.