Share via


Always Encrypted

적용 대상:SQL ServerAzure SQL DatabaseAzure 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 또는 North/South/East/West 영역 등 가능한 암호화된 값의 집합이 작은 경우 특히 권한이 없는 사용자가 암호화된 열의 패턴을 검사하여 암호화된 값에 대한 정보를 추측할 수도 있습니다.

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

    검색 또는 그룹화 매개 변수로 사용할 열에는 결정적 암호화를 사용합니다. 예를 들어 정부 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..SELECT로 데이터를 복사합니다.
    • 암호화된 열에 리터럴 삽입.

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

    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가 지원되지 않습니다.

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

    Important

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

    • 외부(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 DEFINITIONVIEW 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 권한을 명시적으로 부여해야 합니다.

다음 단계