Always Encrypted

적용 대상: SQL Server Azure SQL 데이터베이스Azure SQL Managed Instance

Always Encrypted 다이어그램

Always Encrypted Azure SQL Database, Azure SQL Managed Instance 및 SQL Server 데이터베이스에 저장된 신용 카드 번호 또는 국가 식별 번호(예: 미국 사회 보장 번호)와 같은 중요한 데이터를 보호하도록 설계된 기능입니다. Always Encrypted 클라이언트는 클라이언트 애플리케이션 내에서 중요한 데이터를 암호화하고 데이터베이스 엔진에 암호화 키를 표시하지 않을 수 있습니다. 이렇게 하면 데이터를 소유하고 볼 수 있는 사용자와 데이터를 관리하지만 액세스 권한이 없어야 하는 사용자(온-프레미스 데이터베이스 관리자, 클라우드 데이터베이스 운영자 또는 기타 권한이 높은 권한이 있는 권한 있는 사용자)가 구분됩니다. 따라서 Always Encrypted 통해 고객은 중요한 데이터를 클라우드에 자신 있게 저장하고 악의적인 내부자에 의한 데이터 도난 가능성을 줄일 수 있습니다.

Always Encrypted 암호화된 데이터에 대한 제한된 기밀 쿼리, 같음 비교를 포함하는 쿼리를 지원하도록 구성할 수 있습니다. 예를 들어 지점 조회 검색 또는 같음 조인입니다. 이러한 쿼리는 결정적 암호화를 활용합니다.

참고

보안 enclave는 패턴 일치, 기타 비교 연산자 및 현재 위치 암호화를 사용하여 Always Encrypted 기밀 컴퓨팅 기능을 확장합니다. 자세한 내용은 보안 Enclave를 사용한 Always Encrypted를 참조하세요.

상시 암호화는 암호화를 애플리케이션에 투명하게 만듭니다. 클라이언트 컴퓨터에 설치된 상시 암호화 지원 드라이버가 클라이언트 애플리케이션의 중요한 데이터를 자동으로 암호화하고 암호 해독합니다. 드라이버는 데이터를 데이터베이스 엔진로 전달하기 전에 중요한 열의 데이터를 암호화하고 애플리케이션에 대한 의미 체계가 유지되도록 자동으로 쿼리를 다시 작성합니다. 마찬가지로, 드라이버는 암호화된 데이터베이스 열에 저장되고 쿼리 결과에 포함된 데이터를 투명하게 암호 해독합니다.

Always Encrypted 구성

이 섹션에서는 Always Encrypted 설정에 대한 개요를 제공합니다. 자세한 내용과 시작은 자습서: Always Encrypted 시작을 참조하세요.

데이터베이스에서 Always Encrypted 설정하려면 다음을 수행해야 합니다.

  1. 암호화 키를 프로비전하여 데이터를 보호합니다. Always Encrypted는 두 가지 유형의 키를 사용합니다.

    • 열 암호화 키.
    • 열 마스터 키.

    열 암호화 키는 암호화된 열의 데이터를 암호화하는 데 사용됩니다. 열 마스터 키는 하나 이상의 열 암호화 키를 암호화하는 키 보호 키입니다.

    Azure Key Vault, Windows 인증서 저장소 또는 하드웨어 보안 모듈과 같은 데이터베이스 시스템 외부의 신뢰할 수 있는 키 저장소에 열 마스터 키를 저장해야 합니다.

    그런 다음 열 암호화 키를 프로비전하고 열 마스터 키를 사용하여 각 키를 암호화해야 합니다.

    마지막으로 데이터베이스의 키에 대한 메타데이터를 저장해야 합니다.

    • 열 마스터 키 메타데이터는 열 마스터 키의 위치를 캡처합니다.
    • 열 암호화 키 메타데이터에는 열 암호화 키의 암호화된 값이 포함됩니다. 데이터베이스 엔진은 두 형식의 키를 일반 텍스트로 저장하거나 사용하지 않습니다.

    Always Encrypted 키 관리에 대한 자세한 내용은 Always Encrypted 키 관리 개요를 참조하세요.

  2. 보호할 중요한 데이터가 포함된 선택한 데이터베이스 열에 대한 암호화를 구성합니다. 여기에는 암호화된 열로 새 테이블을 만들거나 기존 데이터베이스 열 및 기존 데이터를 암호화하는 작업이 포함될 수 있습니다. 열에 대한 암호화를 설정할 때 암호화 알고리즘에 대한 정보, 열의 데이터를 보호하는 열 암호화 키 및 암호화 유형을 지정합니다. Always Encrypted 두 가지 암호화 유형을 지원합니다.

    • 결정적 암호화 는 항상 지정된 일반 텍스트 값에 대해 동일한 암호화된 값을 생성합니다. 결정적 암호화를 사용하는 경우 암호화된 열에 대한 지점 조회, 동등 조인, 그룹화 및 인덱싱이 가능합니다. 그러나 True/False 또는 북/남/동/서 지역 등 가능한 암호화된 값의 집합이 작은 경우 특히 권한이 없는 사용자가 암호화된 열의 패턴을 검사하여 암호화된 값에 대한 정보를 추측할 수도 있습니다.

    • 임의 암호화 는 예측하기 어려운 방식으로 데이터를 암호화하는 방법을 사용합니다. 임의 암호화는 더 안전하지만 암호화된 열에 대한 검색, 그룹화, 인덱싱 및 조인을 금지합니다.

    검색 또는 그룹화 매개 변수로 사용할 열에는 결정적 암호화를 사용합니다. 한 예로 정부 ID 번호를 들 수 있습니다. 다른 레코드와 함께 그룹화되지 않고 테이블을 조인하는 데 사용되지 않는 기밀 조사 의견 등의 데이터에는 임의 암호화를 사용합니다.

Always Encrypted 암호화 알고리즘에 대한 자세한 내용은 Always Encrypted 암호화를 참조하세요.

SQL 도구를 사용하여 위의 단계를 수행할 수 있습니다.

Always Encrypted 키와 보호된 중요한 데이터가 데이터베이스 환경에 일반 텍스트로 표시되지 않도록 하기 위해 데이터베이스 엔진은 키 프로비저닝 및 데이터 암호화 또는 암호 해독 작업에 관여할 수 없습니다. 따라서 T-SQL(Transact-SQL)은 키 프로비저닝 또는 암호화 작업을 지원하지 않습니다. 같은 이유로 기존 데이터를 암호화하거나 다시 암호화해야 합니다(다른 암호화 유형 또는 열 암호화 키 사용)는 데이터베이스 외부에서 수행해야 합니다(SQL 도구는 이를 자동화할 수 있음).

참고

보안 enclave를 사용하는 Always Encrypted T-SQL을 사용하여 기존 데이터에 대한 암호화 작업을 허용하여 위의 제한 사항 중 일부를 해제하고 데이터베이스 외부로 데이터를 이동할 필요가 없습니다.

암호화된 열에 대한 쿼리 작동 방식

암호화된 데이터베이스 열에서 쿼리를 실행하려면 암호화된 열에 데이터를 삽입하거나, 암호화된 열에서 일반 텍스트 값을 검색하거나, 결정적 암호화를 사용하여 열에서 지원되는 작업(예: 지점 조회 검색)을 수행하려면 쿼리를 실행하는 사용자 또는 애플리케이션이 다음 필수 조건을 충족해야 합니다.

  • 데이터를 보호하는 열 마스터 키에 액세스할 수 있습니다. 데이터가 포함된 테이블과 같은 SELECT 데이터베이스 수준 권한 외에 키 액세스가 필요합니다.
  • 데이터베이스 연결에서 Always Encrypted 사용하도록 설정된 데이터베이스에 연결합니다. 대부분의 SQL 도구 및 SQL 클라이언트 드라이버는 데이터베이스 연결에 Always Encrypted 사용하도록 설정할 수 있도록 지원합니다.

참고

사용자에게 데이터를 읽는 데 필요한 데이터베이스 권한이 있지만 데이터를 보호하는 키에 액세스할 수 없는 경우 사용자는 데이터베이스 연결에서 Always Encrypted 활성화하지 않고 데이터베이스에 연결하여 암호화된 암호화된 데이터를 검색할 수 있습니다.

암호화된 열에 대한 쿼리의 작동 방식은 다음과 같습니다.

  1. 애플리케이션이 매개 변수가 있는 쿼리를 발급하면 애플리케이션 내의 SQL 클라이언트 드라이버가 데이터베이스 엔진에 투명하게 연결하여 암호화된 열을 대상으로 하고 암호화해야 하는 매개 변수를 결정하기 위해 sp_describe_parameter_encryption(Transact-SQL) 를 호출합니다. 암호화해야 하는 각 매개 변수에 대해 드라이버는 암호화된 열 암호화 키 및 해당 열 마스터 키의 위치를 포함하여 암호화 알고리즘, 암호화 유형 및 키 메타데이터를 받습니다.
  2. 드라이버는 암호화된 열 암호화 키 값을 해독하기 위해 열 마스터 키를 포함하는 키 저장소를 호출합니다. 결과 일반 텍스트 열 암호화 키는 동일한 열 암호화 키를 나중에 사용할 때 키 저장소로의 왕복 횟수를 줄이기 위해 캐시됩니다.
  3. 드라이버는 가져온 일반 텍스트 열 암호화 키를 사용하여 암호화된 열에 해당하는 쿼리 매개 변수를 암호화합니다.
  4. 드라이버는 암호화된 열을 대상으로 하는 매개 변수의 일반 텍스트 값을 암호화된 값으로 대체하고 처리를 위해 쿼리를 데이터베이스 엔진으로 보냅니다.
  5. 데이터베이스 엔진은 결정적 암호화를 사용하여 열에 대한 같음 비교를 포함할 수 있는 쿼리를 실행합니다.
  6. 쿼리 결과에 암호화된 열의 데이터가 포함된 경우 데이터베이스 엔진은 암호화 알고리즘, 암호화 유형 및 키 메타데이터에 대한 정보를 포함하여 각 열에 대한 암호화 메타데이터를 결과 집합에 연결합니다.
  7. 데이터베이스 엔진은 결과 집합을 클라이언트 애플리케이션으로 보냅니다.
  8. 받은 결과 집합의 암호화된 각 열에 대해 드라이버는 먼저 로컬 캐시에서 일반 텍스트 열 암호화 키를 찾으려고 시도하고 캐시에서 키를 찾을 수 없는 경우에만 열 마스터 키를 보유하는 키 저장소로 왕복합니다.
  9. 드라이버는 결과의 암호를 해독하고 애플리케이션에 일반 텍스트 값을 반환합니다.

클라이언트 드라이버는 열 마스터 키가 포함된 키 저장소를 캡슐화하는 클라이언트 쪽 소프트웨어 구성 요소인 열 마스터 키 저장소 공급자를 사용하여 열 마스터 키가 포함된 키 저장소와 상호 작용합니다. 일반적인 유형의 키 저장소에 대한 공급자는 Microsoft의 클라이언트 쪽 드라이버 라이브러리 또는 독립 실행형 다운로드로 사용할 수 있습니다. 또한 사용자 고유의 공급자를 구현할 수 있습니다. 기본 제공 열 마스터 키 저장소 공급자를 포함하여 Always Encrypted 기능은 드라이버 라이브러리와 해당 버전에 따라 다릅니다.

Always Encrypted 지원하는 클라이언트 드라이버 목록과 암호화된 열을 쿼리하는 애플리케이션을 개발하는 방법에 대한 자세한 내용은 Always Encrypted 사용하여 애플리케이션 개발을 참조하세요.

AZURE Data Studio 또는 SSMS와 같은 SQL 도구를 사용하여 암호화된 열을 쿼리할 수도 있습니다.

제한 사항

암호화된 열의 쿼리에는 다음과 같은 제한 사항이 적용됩니다.

  • 결정적 암호화는 같음 비교와 관련된 다음 작업을 지원합니다. 다른 작업은 허용되지 않습니다.

  • 임의 암호화를 사용하여 암호화된 열에 대한 계산은 허용되지 않습니다.

    참고

    보안 enclave를 사용하는 Always Encrypted 임의 암호화를 사용하여 열에서 패턴 일치, 비교 연산자, 정렬 및 인덱싱을 허용하여 위의 제한을 완화합니다.

  • 일반 텍스트 및 암호화된 데이터와 관련된 계산을 트리거하는 쿼리 문은 허용되지 않습니다. 예를 들면 다음과 같습니다.

    • 암호화된 열을 일반 텍스트 열 또는 리터럴과 비교합니다.
    • 일반 텍스트 열에서 암호화된 열(또는 그 반대로) UPDATE, BULK INSERT, SELECT INTO 또는 INSERT로 데이터를 복사합니다 . 를 선택합니다.
    • 암호화된 열에 리터럴 삽입

    이러한 문은 다음과 같은 피연산자 충돌 오류를 발생합니다.

    Msg 206, Level 16, State 2, Line 89
        Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with char
    
  • 애플리케이션은 쿼리 매개 변수를 사용하여 암호화된 열에 해당하는 값을 전달해야 합니다. 예를 들어 암호화된 열에 데이터를 삽입하거나 암호화된 열로 필터링하는 경우(결정적 암호화를 사용하는 경우) 암호화된 열에 해당하는 리터럴 또는 T-SQL 변수 전달은 지원되지 않습니다. 사용 중인 클라이언트 드라이버와 관련된 자세한 내용은 Always Encrypted 사용하여 애플리케이션 개발을 참조하세요.

  • 이러한 도구에서 암호화된 열에 해당하는 값을 전달하는 쿼리를 실행하려면 Azure Data Studio 또는 SSMS의 Always Encrypted 변수에 매개 변수화를 사용해야 합니다. 예를 들어 암호화된 열에 데이터를 삽입하거나 암호화된 열로 필터링하는 경우(결정적 암호화를 사용하는 경우)

  • 암호화된 열을 대상으로 하는 테이블 반환 매개 변수는 지원되지 않습니다.

  • 다음 절을 사용하는 쿼리는 지원되지 않습니다.

  • 암호화된 열의 정의를 변경한 후 sp_refresh_parameter_encryption 실행하여 개체에 대한 Always Encrypted 메타데이터를 업데이트합니다.

  • 아래 특성이 있는 열에는 Always Encrypted 지원되지 않습니다.

    • xml, timestamp, rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, 별칭, 사용자 정의 형식 중 하나를 사용하는 열입니다.
    • FILESTREAM
    • IDENTITY 속성이 있는 열입니다.
    • ROWGUIDCOL 속성이 있는 열입니다.
    • 결정적 암호화를 사용할 때 이진 코드 지점(_BIN2) 데이터 정렬 이외의 데이터 정렬이 있는 문자열(varchar, char 등) 열입니다.
    • 임의 암호화를 사용할 때 클러스터형 및 비클러스터형 인덱스의 키인 열입니다(결정적 암호화를 사용하는 열의 인덱스가 지원됨).
    • 전체 텍스트 인덱스에 포함된 열(Always Encrypted 전체 텍스트 검색을 지원하지 않음).
    • 계산 열.
    • 계산된 열에서 참조되는 열(식이 Always Encrypted에 대해 지원되지 않는 작업을 수행하는 경우)
    • 스파스 열 집합입니다.
    • 임의 암호화를 사용할 때 통계에서 참조되는 열입니다(결정적 암호화가 지원됨).
    • 열을 분할합니다.
    • 기본 제약 조건이 있는 열입니다.
    • 임의 암호화를 사용할 때 고유 제약 조건으로 참조되는 열입니다(결정적 암호화가 지원됨).
    • 임의 암호화를 사용하는 경우 기본 키 열(결정적 암호화도 지원됨)
    • 임의 암호화를 사용하거나 결정적 암호화를 사용하는 경우, 참조된 열과 참조하는 열이 서로 다른 키 또는 알고리즘을 사용하는 경우 외래 키 제약 조건의 열을 참조합니다.
    • check 제약 조건에서 참조하는 열입니다.
    • 변경 데이터 캡처를 사용하여 캡처/추적된 열입니다.
    • 변경 내용 추적이 있는 테이블의 기본 키 열입니다.
    • 마스킹된 열( 동적 데이터 마스킹 사용).
    • stretch 데이터베이스 테이블의 열입니다. 상시 암호화로 암호화된 열이 있는 테이블은 스트레치에 사용할 수 있습니다.

    중요

    Stretch Database는 SQL Server 2022(16.x)에서 더 이상 사용되지 않습니다. Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요.

    • 외부(PolyBase) 테이블의 열(참고: 암호화된 열이 있는 테이블과 외부 테이블을 같은 쿼리에서 사용할 수 있음).
  • 다음 기능은 암호화된 열에서 작동하지 않습니다.

Always Encrypted Transact-SQL 참조

Always Encrypted 다음 Transact-SQL 문, 시스템 카탈로그 뷰, 시스템 저장 프로시저 및 권한을 사용합니다.

시스템 카탈로그 뷰 및 저장 프로시저

각 열에 대해 저장된 암호화 메타데이터에 대한 자세한 내용은 sys.columns(Transact-SQL) 를 참조하세요.

데이터베이스 사용 권한

Always Encrypted 대한 4가지 데이터베이스 권한이 있습니다.

  • ALTER ANY COLUMN MASTER KEY - 열 마스터 키 메타데이터를 만들고 삭제하는 데 필요합니다.

  • ALTER ANY COLUMN ENCRYPTION KEY - 열 암호화 키 메타데이터를 만들고 삭제하는 데 필요합니다.

  • VIEW ANY COLUMN MASTER KEY DEFINITION - 암호화된 열을 쿼리하는 데 필요한 열 마스터 키 메타데이터에 액세스하고 읽는 데 필요합니다.

  • VIEW ANY COLUMN ENCRYPTION KEY DEFINITION - 암호화된 열을 쿼리하는 데 필요한 열 마스터 키 메타데이터에 액세스하고 읽는 데 필요합니다.

다음 표에는 일반적인 작업에 필요한 사용 권한이 요약되어 있습니다.

시나리오 ALTER ANY COLUMN MASTER KEY ALTER ANY COLUMN ENCRYPTION KEY VIEW ANY COLUMN MASTER KEY DEFINITION VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
키 관리(데이터베이스에서 키 메타데이터 만들기/변경/검토) X X X X
암호화된 열 쿼리 X X

중요 고려 사항

  • 사용자가 열 마스터 키(키 저장소)에 대한 권한이 없고 열을 보호하고 일반 텍스트 시도에 액세스하지 않더라도 암호화된 열을 선택할 때 는 VIEW ANY COLUMN MASTER KEY DEFINITION 및 VIEW ANY COLUMN ENCRYPTION KEY DEFINITION 권한이 필요합니다.

  • SQL Server VIEW ANY COLUMN MASTER KEY DEFINITIONVIEW ANY COLUMN ENCRYPTION KEY DEFINITION 권한은 기본적으로 공용 고정 데이터베이스 역할에 부여됩니다. 데이터베이스 관리자는 퍼블릭 역할에 대한 권한을 취소(또는 거부)하고 특정 역할 또는 사용자에게 부여하여 더 제한된 제어를 구현하도록 선택할 수 있습니다.

  • SQL Database VIEW ANY COLUMN MASTER KEY DEFINITIONVIEW ANY COLUMN ENCRYPTION KEY DEFINITION 권한은 기본적으로 공용 고정 데이터베이스 역할에 부여되지 않습니다. 이렇게 하면 특정 기존 레거시 도구(이전 버전의 DacFx 사용)가 제대로 작동할 수 있습니다. 따라서 암호화된 열을 사용하려면(암호를 해독하지 않더라도) 데이터베이스 관리자는 VIEW ANY COLUMN MASTER KEY DEFINITIONVIEW ANY COLUMN ENCRYPTION KEY DEFINITION 권한을 명시적으로 부여해야 합니다.

다음 단계

추가 정보