Always Encrypted

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Diagram of 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는 아래 특성을 가진 열에 대해 지원되지 않습니다.

    Important

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

    • 외부(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 열 마스터 키 정의 보기 열 암호화 키 정의 보기
키 관리(데이터베이스에서 키 메타데이터 만들기/변경/검토) 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 권한을 명시적으로 부여해야 합니다.

다음 단계

참고 항목