보안 Enclave를 사용한 Always EncryptedAlways Encrypted with secure enclaves

적용 대상:Applies to: 예SQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) - Windows만 해당 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database적용 대상:Applies to: 예SQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) - Windows only 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

보안 enclave를 사용한 Always Encrypted는 바로 암호화와 더 풍부한 기밀 쿼리를 사용하여 Always Encrypted의 기밀 컴퓨팅 기능을 확장합니다.Always Encrypted with secure enclaves expands confidential computing capabilities of Always Encrypted by enabling in-place encryption and richer confidential queries. 보안 enclave를 사용한 Always Encrypted는 SQL Server 2019 (15.x)SQL Server 2019 (15.x)Azure SQL DatabaseAzure SQL Database(미리 보기)에서 사용할 수 있습니다.Always Encrypted with secure enclaves is available in SQL Server 2019 (15.x)SQL Server 2019 (15.x) and in Azure SQL DatabaseAzure SQL Database (in preview).

2015년의 Azure SQL DatabaseAzure SQL DatabaseSQL Server 2016(13.x)SQL Server 2016 (13.x)에 도입된 Always Encrypted는 높은 권한이 있는 다음 ‘권한이 없는’ 사용자와 맬웨어로부터 중요한 데이터의 기밀을 보호합니다. DBA, 컴퓨터 관리자, 클라우드 관리자 또는 서버 인스턴스, 하드웨어 등에 대해 합법적인 액세스 권한이 있지만 실제 데이터의 일부 또는 전체에 액세스할 수 없는 사용자입니다.Introduced in Azure SQL DatabaseAzure SQL Database in 2015 and in SQL Server 2016(13.x)SQL Server 2016 (13.x), Always Encrypted protects the confidentiality of sensitive data from malware and high-privileged unauthorized users: DBAs, computer admins, cloud admins, or anyone else who has legitimate access to server instances, hardware, etc., but should not have access to some or all of the actual data.

이 문서에 설명된 향상된 기능을 사용하지 않는 Always Encrypted는 클라이언트 쪽에서 데이터를 암호화하여 데이터 또는 해당 암호화 키가 데이터베이스 엔진Database Engine 내에서 일반 텍스트로 표시되지 ‘않도록’ 함으로써 데이터를 보호합니다.Without the enhancements discussed in this article, Always Encrypted protects the data by encrypting it on the client side and never allowing the data or the corresponding cryptographic keys to appear in plaintext inside the 데이터베이스 엔진Database Engine. 따라서 데이터베이스 내에 있는 암호화된 열에 대한 기능이 심각하게 제한됩니다.As a result, the functionality on encrypted columns inside the database is severely restricted. 데이터베이스 엔진Database Engine가 암호화된 데이터에 관해 수행할 수 있는 유일한 작업은 같음 비교입니다(결정적 암호화에서만 사용할 수 있음).The only operations the 데이터베이스 엔진Database Engine can perform on encrypted data are equality comparisons (only available with deterministic encryption). 암호화 작업(초기 데이터 암호화 또는 키 회전), 더 풍부한 쿼리(예: 패턴 일치) 등 다른 모든 작업은 데이터베이스 내에서 지원되지 않습니다.All other operations, including cryptographic operations (initial data encryption or key rotation) and richer queries (for example, pattern matching) are not supported inside the database. 사용자가 클라이언트 쪽에서 해당 작업을 수행하려면 데이터베이스 외부로 데이터를 이동해야 합니다.Users need to move their data outside of the database to perform these operations on the client-side.

‘보안 enclave를 사용한’ Always Encrypted는 서버 쪽의 보안 enclave 내에서 일반 텍스트 데이터에 대한 일부 계산을 허용하여 해당 제한을 해결합니다.Always Encrypted with secure enclaves addresses these limitations by allowing some computations on plaintext data inside a secure enclave on the server side. 보안 enclave는 데이터베이스 엔진Database Engine 프로세스 내에서 보호되는 메모리 영역입니다.A secure enclave is a protected region of memory within the 데이터베이스 엔진Database Engine process. 보안 enclave는 데이터베이스 엔진Database Engine의 나머지 부분 및 호스팅 머신의 다른 프로세스에서 불투명 상자로 표시됩니다.The secure enclave appears as an opaque box to the rest of the 데이터베이스 엔진Database Engine and other processes on the hosting machine. 디버거를 사용하더라도 외부에서 Enclave 내의 데이터나 코드를 볼 수 없습니다.There is no way to view any data or code inside the enclave from the outside, even with a debugger. 해당 속성을 사용하면 데이터 기밀성 손상 없이 일반 텍스트 형식의 암호화 키 및 중요한 데이터에 안전하게 액세스할 수 있는 보안 enclave의 ‘신뢰 실행 환경’이 생성됩니다.These properties make the secure enclave a trusted execution environment that can safely access cryptographic keys and sensitive data in plaintext, without compromising data confidentiality.

Always Encrypted는 다음 다이어그램에 설명된 것처럼 보안 Enclave를 사용합니다.Always Encrypted uses secure enclaves as illustrated in the following diagram:

데이터 흐름

애플리케이션에서 제출한 Transact-SQL 문을 구문 분석할 때 데이터베이스 엔진Database Engine에서는 보안 enclave를 사용해야 하는 암호화된 데이터의 모든 작업이 문에 포함되어 있는지 확인합니다.When parsing a Transact-SQL statement submitted by an application, the 데이터베이스 엔진Database Engine determines if the statement contains any operations on encrypted data that require the use of the secure enclave. 해당 문의 경우:For such statements:

  • 클라이언트 드라이버는 작업에 필요한 열 암호화 키를 보안 채널을 통해 보안 enclave로 보내고 실행 문을 제출합니다.The client driver sends the column encryption keys required for the operations to the secure enclave (over a secure channel), and submits the statement for execution.

  • 문을 처리할 때 데이터베이스 엔진Database Engine에서는 암호화된 열의 암호화 작업 또는 계산을 보안 enclave에 위임합니다.When processing the statement, the 데이터베이스 엔진Database Engine delegates cryptographic operations or computations on encrypted columns to the secure enclave. 필요한 경우 enclave는 데이터의 암호를 해독하고 일반 텍스트를 기반으로 계산을 수행합니다.If needed, the enclave decrypts the data and performs computations on plaintext.

문을 처리하는 동안 데이터 및 열 암호화 키는 둘 다 보안 enclave 외부의 데이터베이스 엔진Database Engine에 일반 텍스트로 공개되지 않습니다.During statement processing, both the data and the column encryption keys are not exposed in plaintext in the 데이터베이스 엔진Database Engine outside of the secure enclave.

지원되는 enclave 기술Supported enclave technologies

SQL Server 2019 (15.x)SQL Server 2019 (15.x)에서 보안 Enclave를 사용한 Always Encrypted는 Windows의 VBS(가상화 기반 보안) 보안 메모리 Enclave(가상 보안 모드 또는 VSM Enclave라고도 함)를 사용합니다.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), Always Encrypted with secure enclaves uses Virtualization-based Security (VBS) secure memory enclaves (also known as Virtual Secure Mode, or VSM enclaves) in Windows.

Azure SQL DatabaseAzure SQL Database에서 보안 enclave를 사용한 Always Encrypted는 Intel SGX(Intel Software Guard Extensions) enclave를 사용합니다.In Azure SQL DatabaseAzure SQL Database, Always Encrypted with secure enclaves uses Intel Software Guard Extensions (Intel SGX) enclaves. Intel SGX는 DC 시리즈 하드웨어 구성을 사용하는 데이터베이스에서 지원되는 하드웨어 기반의 신뢰 실행 환경 기술입니다.Intel SGX is a hardware-based trusted execution environment technology supported in databases that use the DC-series hardware configuration.

보안 enclave 증명Secure enclave attestation

데이터베이스 엔진Database Engine 내부의 보안 enclave는 일반 텍스트 형식의 중요한 데이터 및 열 암호화 키에 액세스할 수 있습니다.The secure enclave inside the 데이터베이스 엔진Database Engine can access sensitive data and the column encryption keys in plaintext. 따라서 enclave 계산을 포함하는 문을 데이터베이스 엔진Database Engine에 제출하기 전에 애플리케이션 내부 클라이언트 드라이버는 보안 enclave가 진정한 VBS 또는 SGX enclave이며 보안 enclave 내부에서 실행되는 코드는 기밀 쿼리에서 지원되는 바로 암호화 및 작업의 Always Encrypted 암호화 알고리즘을 구현하는 진정한 Always Encrypted 라이브러리인지 확인해야 합니다.Therefore, before submitting a statement that involves enclave computations to the 데이터베이스 엔진Database Engine, the client driver inside the application must verify the secure enclave is a genuine VBS or SGX enclave and the code running inside the secure enclave is the genuine Always Encrypted library that implements Always Encrypted cryptographic algorithms for in-place encryption and operations supported in confidential queries.

Enclave 확인 프로세스를 enclave 증명 이라고 하며, 애플리케이션 내의 클라이언트 드라이버와 데이터베이스 엔진Database Engine은 둘 다 외부 증명 서비스에 연결합니다.The process of verifying the enclave is called enclave attestation, and it involves both a client driver within the application and 데이터베이스 엔진Database Engine contacting an external attestation service. 증명 프로세스 사양은 enclave(VBS 또는 SGX) 및 증명 서비스의 형식에 따라 결정됩니다.The specifics of the attestation process depend on the type of the enclave (VBS or SGX) and the attestation service.

SQL Server 2019 (15.x)SQL Server 2019 (15.x)에서 VBS 보안 enclave의 증명 프로세스는 Windows Defender System Guard 런타임 증명이며, 해당 프로세스에는 증명 서비스로 HGS(호스트 보호 서비스)가 필요합니다.The attestation process for VBS secure enclaves in SQL Server 2019 (15.x)SQL Server 2019 (15.x) is Windows Defender System Guard runtime attestation, which requires Host Guardian Service (HGS) as an attestation service.

Azure SQL DatabaseAzure SQL Database의 Intel SGX enclave 증명에는 Microsoft Azure Attestation이 필요합니다.The attestation of Intel SGX enclaves in Azure SQL DatabaseAzure SQL Database requires Microsoft Azure Attestation.

참고

SQL Server 2019 (15.x)SQL Server 2019 (15.x)에서는 Microsoft Azure Attestation을 지원하지 않습니다.does not support Microsoft Azure Attestation. 호스트 보호 서비스는 SQL Server 2019 (15.x)SQL Server 2019 (15.x)에서 VBS enclave에 대해 지원되는 유일한 증명 솔루션입니다.Host Guardian Service is the only attestation solution supported for VBS enclaves in SQL Server 2019 (15.x)SQL Server 2019 (15.x).

지원되는 클라이언트 드라이버Supported client drivers

보안 Enclave를 사용한 Always Encrypted를 사용하려면 애플리케이션은 해당 기능을 지원하는 클라이언트 드라이버를 사용해야 합니다.To use Always Encrypted with secure enclaves, an application must use a client driver that supports the feature. 애플리케이션 및 클라이언트 드라이버에서 enclave 계산 및 enclave 증명을 사용하도록 구성합니다.Configure the application and the client driver to enable enclave computations and enclave attestation. 지원되는 클라이언트 드라이버 목록을 비롯한 자세한 내용은 Always Encrypted를 사용하여 애플리케이션 개발을 참조하세요.For details, including the list of supported client drivers, see Develop applications using Always Encrypted.

용어Terminology

Enclave 사용 키Enclave-enabled keys

보안 Enclave를 사용한 Always Encrypted는 Enclave 사용 키의 개념을 도입했습니다.Always Encrypted with secure enclaves introduces the concept of enclave-enabled keys:

  • Enclave 사용 열 마스터 키 – 데이터베이스 내 열 마스터 키 메타데이터 개체에 ENCLAVE_COMPUTATIONS 속성이 지정되어 있는 열 마스터 키입니다.Enclave-enabled column master key - a column master key that has the ENCLAVE_COMPUTATIONS property specified in the column master key metadata object inside the database. 열 마스터 키 메타데이터 개체는 메타데이터 속성의 유효한 서명도 포함해야 합니다.The column master key metadata object must also contain a valid signature of the metadata properties. 자세한 내용은 CREATE COLUMN MASTER KEY(Transact-SQL)를 참조하세요.For more information, see CREATE COLUMN MASTER KEY (Transact-SQL)
  • Enclave 사용 열 암호화 키 – Enclave 사용 열 마스터 키로 암호화된 열 암호화 키입니다.Enclave-enabled column encryption key - a column encryption key that is encrypted with an enclave-enabled column master key. Enclave 사용 열 암호화 키만 보안 enclave 내에서 계산에 사용할 수 있습니다.Only enclave-enabled column encryption keys can be used for computations inside the secure enclave.

자세한 내용은 Manage keys for Always Encrypted with secure enclaves(보안 Enclave를 사용한 Always Encrypted 키 관리)를 참조하세요.For more information, see Manage keys for Always Encrypted with secure enclaves.

Enclave 사용 열Enclave-enabled columns

Enclave 사용 열은 Enclave 사용 열 암호화 키로 암호화한 데이터베이스 열입니다.An enclave-enabled column is a database column encrypted with an enclave-enabled column encryption key.

Enclave 사용 열의 기밀 컴퓨팅 기능Confidential computing capabilities for enclave-enabled columns

보안 enclave를 사용한 Always Encrypted의 두 가지 주요 이점은 바로 암호화 및 풍부한 기밀 쿼리입니다.The two key benefits of Always Encrypted with secure enclaves are in-place encryption and rich confidential queries.

바로 암호화In-place encryption

바로 암호화를 사용하면 데이터베이스 외부에서 데이터를 이동하지 않고 보안 enclave 내에서 데이터베이스 열의 암호화 작업을 수행할 수 있습니다.In-place encryption allows cryptographic operations on database columns inside the secure enclave, without moving the data outside of the database. 바로 암호화는 암호화의 성능과 안정성을 개선합니다.In-place encryption improves the performance and the reliability of encryption. ALTER TABLE(Transact-SQL) 문을 사용하여 바로 암호화를 수행할 수 있습니다.You can perform in-place encryption using the ALTER TABLE (Transact-SQL) statement.

바로 지원되는 암호화 작업은 다음과 같습니다.The cryptographic operations supported in-place are:

  • Enclave 사용 열 암호화 키를 사용하여 일반 텍스트 열 암호화Encrypting a plaintext column with an enclave-enabled column encryption key.
  • 암호화된 enclave 사용 열을 다음으로 다시 암호화:Re-encrypting an encrypted enclave-enabled column to:
    • 열 암호화 키 회전 - 새 enclave 사용 열 암호화 키로 열을 다시 암호화합니다.Rotate a column encryption key - re-encrypt the column with a new enclave-enabled column encryption key.
    • Enclave 사용 열의 암호화 유형을 변경합니다(예: 결정적 유형에서 임의 유형으로).Change the encryption type of an enclave-enabled column, for example, from deterministic to randomized.
  • Enclave 사용 열에 저장된 데이터 암호 해독(열을 일반 텍스트 열로 변환)Decrypting data stored in an enclave-enabled column (converting the column into a plaintext column).

암호화 작업에 관련된 열 암호화 키가 enclave를 사용하는 경우 결정적 암호화와 임의 암호화에서 둘 다 바로 암호화가 허용됩니다.In-place encryption is allowed with both deterministic and randomized encryption, as long as the column encryption keys involved in a cryptographic operation are enclave-enabled.

기밀 쿼리Confidential queries

기밀 쿼리는 보안 enclave 내에서 수행되는 enclave 사용 열의 작업과 관련된 DML 쿼리입니다.Confidential queries are DML queries that involve operations on enclave-enabled columns performed inside the secure enclave.

보안 enclave 내에서 지원되는 작업은 다음과 같습니다.The operations supported inside the secure enclaves are:

작업Operation SQL Server 2019 (15.x)SQL Server 2019 (15.x) Azure SQL DatabaseAzure SQL Database
비교 연산자Comparison Operators 지원됨Supported 지원됨Supported
BETWEEN(Transact-SQL)BETWEEN (Transact-SQL) 지원됨Supported 지원됨Supported
IN(Transact-SQL)IN (Transact-SQL) 지원됨Supported 지원됨Supported
LIKE(Transact-SQL)LIKE (Transact-SQL) 지원됨Supported 지원됨Supported
DISTINCTDISTINCT 지원됨Supported 지원됨Supported
조인Joins 중첩된 루프 조인만 지원됨Only nested loop joins supported 지원됨Supported
SELECT - ORDER BY 절(Transact-SQL)SELECT - ORDER BY Clause (Transact-SQL) 지원되지 않음Not supported 지원됨Supported
SELECT - GROUP BY- Transact-SQLSELECT - GROUP BY- Transact-SQL 지원되지 않음Not supported 지원됨Supported

참고

위의 작업은 결정적 암호화가 아닌 임의 암호화를 사용하는 enclave 사용 열의 보안 enclave에서만 지원됩니다.The above operations are supported in secure enclaves only on enclave-enabled columns using randomized encryption, and not deterministic encryption. 같음 비교는 결정적 암호화를 사용하는 열에서 지원되는 유일한 계산을 유지하며, 열이 enclave를 사용하는지 여부에 관계없이 enclave 외부의 암호 텍스트를 비교하여 수행됩니다.Equality comparison remains the only computation supported on columns using deterministic encryption, and it's performed by comparing the ciphertext outside of the enclave, regardless if the column is enclave-enabled or not. 결정적 암호화는 같음 비교와 관련해서 다음 작업을 지원합니다.Deterministic encryption supports the following operations involving equality comparisons:

SQL Server 2019 (15.x)SQL Server 2019 (15.x)에서는 문자열 열(char, nchar)에서 enclave를 사용하는 기밀 쿼리를 수행하려면 열에서 binary2 정렬 순서(BIN2) 데이터 정렬을 사용해야 합니다.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), confidential queries using enclaves on a character string column (char, nchar) require the column uses a binary2 sort order (BIN2) collation. Azure SQL DatabaseAzure SQL Database에서는 문자열에서 기밀 쿼리를 수행하려면 BIN2 데이터 정렬 또는 UTF-8 데이터 정렬이 필요합니다.In Azure SQL DatabaseAzure SQL Database, confidential queries on character strings require a BIN2 collation or a UTF-8 collation.

Enclave 사용 열의 인덱스Indexes on enclave-enabled columns

임의 암호화를 사용하여 enclave 사용 열에서 비클러스터형 인덱스를 만들면 보안 enclave를 사용하는 기밀 DML 쿼리를 더 빠르게 실행할 수 있습니다.You can create nonclustered indexes on enclave-enabled columns using randomized encryption to make confidential DML queries using the secure enclave run faster.

임의 암호화를 사용하여 암호화되는 열의 인덱스가 중요한 데이터를 누출하지 않도록 인덱스 데이터 구조(B-트리)의 키 값은 암호화되고 해당 일반 텍스트 값에 따라 정렬됩니다.To ensure an index on a column that is encrypted using randomized encryption doesn't leak sensitive data, the key values in the index data structure (B-tree) are encrypted and sorted based on their plaintext values. Enclave 내에서 쿼리를 처리하는 데는 일반 텍스트 값을 기준으로 정렬하는 것이 유용합니다.Sorting by the plaintext value is also useful for processing queries inside the enclave. 데이터베이스 엔진Database Engine의 쿼리 실행기가 enclave 내의 계산을 위해 암호화된 열의 인덱스를 사용하는 경우 인덱스를 검색하여 열에 저장된 특정 값을 조회합니다.When the query executor in the 데이터베이스 엔진Database Engine uses an index on an encrypted column for computations inside the enclave, it searches the index to look up specific values stored in the column. 각 검색에서 여러 개의 비교를 수행할 수 있습니다.Each search may involve multiple comparisons. 쿼리 실행기는 각 비교를 enclave에 위임하고, enclave는 열에 저장된 값 및 비교할 암호화된 인덱스 키 값의 암호를 해독하고 일반 텍스트를 비교하여 비교 결과를 실행기에 반환합니다.The query executor delegates each comparison to the enclave, which decrypts a value stored in the column and the encrypted index key value to be compared, it performs the comparison on plaintext and it returns the result of the comparison to the executor.

임의 암호화를 사용하는데 enclave를 지원하지 않는 열에는 인덱스를 만들 수 없습니다.Creating indexes on columns that use randomized encryption and are not enclave-enabled remains unsupported.

결정적 암호화를 사용하는 열의 인덱스는 열의 enclave 사용 여부에 관계없이 암호 텍스트(일반 텍스트 아님)를 기준으로 정렬됩니다.An index on a column using deterministic encryption is sorted based on ciphertext (not plaintext), regardless if the column is enclave-enabled or not.

자세한 내용은 보안 Enclave를 사용한 Always Encrypted를 이용하여 열에 인덱스 만들기 및 사용을 참조하세요.For more information, see Create and use indexes on columns using Always Encrypted with secure enclaves. 데이터베이스 엔진Database Engine 인덱싱의 작동 방식에 관한 일반적인 내용은 클러스터형 및 비클러스터형 인덱스 소개 문서를 참조하세요.For general information on how indexing in 데이터베이스 엔진Database Engine works, see the article, Clustered and Nonclustered Indexes Described.

데이터베이스 복구Database recovery

SQL Server 인스턴스에서 오류가 발생하면 데이터베이스가 불완전한 트랜잭션으로 인한 수정 내용이 데이터 파일에 포함된 상태로 남겨질 수 있습니다.If an instance of SQL Server fails, its databases may be left in a state where the data files may contain some modifications from incomplete transactions. 인스턴스를 시작하면 트랜잭션 로그에서 발견된 불완전한 트랜잭션을 모두 롤백하여 데이터베이스의 무결성을 유지하는 데이터베이스 복구 프로세스가 실행됩니다.When the instance is started, it runs a process called database recovery, which involves rolling back every incomplete transaction found in the transaction log to make sure the integrity of the database is preserved. 불완전한 트랜잭션이 인덱스를 변경한 경우 해당 변경 내용도 취소해야 합니다.If an incomplete transaction made any changes to an index, those changes also need to be undone. 예를 들어 인덱스의 일부 키 값을 제거하거나 다시 삽입해야 할 수 있습니다.For example, some key values in the index may need to be removed or reinserted.

중요

데이터베이스에 대해 ADR(가속 데이터베이스 복구)을 사용하도록 설정한 다음, 임의 암호화로 암호화된 enclave 사용 열에 첫 번째 인덱스를 만드는 것이 좋습니다.Microsoft strongly recommends enabling Accelerated database recovery (ADR) for your database, before creating the first index on an enclave-enabled column encrypted with randomized encryption. ADR은 Azure SQL DatabaseAzure SQL Database에서 기본적으로 사용되지만 SQL Server 2019 (15.x)SQL Server 2019 (15.x)에서는 사용되지 않습니다.ADR is enabled by default in Azure SQL DatabaseAzure SQL Database, but not in SQL Server 2019 (15.x)SQL Server 2019 (15.x).

인덱스의 변경 내용을 취소하는 기존 데이터베이스 복구 프로세스(ARIES 복구 모델을 따름)에서는 애플리케이션이 열의 열 암호화 키를 enclave에 제공할 때까지 SQL Server에서 기다려야 하며, 오랜 시간이 걸릴 수 있습니다.With the traditional database recovery process (that follows the ARIES recovery model), to undo a change to an index, SQL Server needs to wait until an application provides the column encryption key for the column to the enclave, which can take a long time. ADR(가속 데이터베이스 복구)을 사용하면 enclave 내부 캐시에서 열 암호화 키를 사용할 수 없어 지연되어야 하는 실행 취소 작업 수가 훨씬 줄어듭니다.Accelerated database recovery (ADR) dramatically reduces the number of undo operations that must be deferred because a column encryption key is not available in the cache inside the enclave. 따라서 새 트랜잭션이 차단될 가능성이 최소화되어 데이터베이스 가용성이 상당히 증가합니다.Consequently, it substantially increases the database availability by minimizing a chance for a new transaction to get blocked. ADR을 사용하는 경우에도 SQL Server에서 이전 데이터 버전 정리를 완료하려면 열 암호화 키가 필요할 수 있지만 백그라운드 작업으로 수행하기 때문에 데이터베이스 또는 사용자 트랜잭션의 가용성에는 영향을 주지 않습니다.With ADR enabled, SQL Server still may need a column encryption key to complete cleaning up old data versions but it does that as a background task that does not impact the availability of the database or user transactions. 그러나 누락된 열 암호화 키로 인해 실패한 정리 작업을 나타내는 오류 메시지가 오류 로그에 표시될 수 있습니다.You may, however, see error messages in the error log, indicating failed cleanup operations due to a missing column encryption key.

보안 고려 사항Security considerations

다음 보안 고려 사항은 보안 enclave를 사용한 Always Encrypted에 적용됩니다.The following security considerations apply to Always Encrypted with secure enclaves.

  • enclave 내부 데이터의 보안은 증명 프로토콜 및 증명 서비스에 따라 달라집니다.The security of your data inside the enclave depends on an attestation protocol and an attestation service. 따라서 신뢰할 수 있는 관리자가 증명 서비스와 증명 서비스에서 적용하는 증명 정책을 관리하도록 해야 합니다.Therefore, you need to ensure the attestation service and attestation policies, the attestation service enforces, are managed by a trusted administrator. 또한 증명 서비스는 일반적으로 다양한 정책과 증명 프로토콜을 지원하고, 이 중에서 일부는 enclave 및 환경에 대해 최소한의 확인을 수행하며 테스트 및 개발용으로 설계되었습니다.Also, attestation services typically support different policies and attestation protocols, some of which perform minimal verification of the enclave and its environment, and are designed for testing and development. 해당 증명 서비스와 관련된 지침에 따라 권장 구성 및 정책을 프로덕션 배포에 사용합니다.Closely follow the guidelines specific to your attestation service to ensure you are using the recommended configurations and policies for your production deployments.
  • 임의 암호화를 사용하는 열을 enclave 사용 열 암호화 키로 암호화하면 열 지원 범위 비교와 같은, 열에 저장된 데이터의 순서가 누출될 수 있습니다.Encrypting a column using randomized encryption with an enclave-enabled column encryption key may result in leaking the order of data stored in the column, as such columns support range comparisons. 예를 들어 직원 급여를 포함하는 암호화된 열에 인덱스가 있는 경우, 악의적인 DBA가 인덱스를 검색하여 최대 암호화된 급여 값을 찾고 최대 급여를 받는 사람을 식별할 수 있습니다(사람 이름은 암호화되지 않았다고 가정).For example, if an encrypted column, containing employee salaries, has an index, a malicious DBA could scan the index to find the maximum encrypted salary value and identify a person with the maximum salary (assuming the name of the person is not encrypted).
  • Always Encrypted를 사용하여 DBA의 무단 액세스로부터 중요한 데이터를 보호하는 경우 열 마스터 키 또는 열 암호화 키를 DBA와 공유하지 마세요.If you use Always Encrypted to protect sensitive data from unauthorized access by DBAs, do not share the column master keys or column encryption keys with the DBAs. DBA는 enclave 내부의 열 암호화 키 캐시를 활용하여 키에 직접 액세스하지 않고도 암호화된 열의 인덱스를 관리할 수 있습니다.A DBA can manage indexes on encrypted columns without having direct access to the keys, by leveraging the cache of column encryption keys inside the enclave.

비즈니스 연속성, 재해 복구 및 데이터 마이그레이션에 대한 고려 사항Considerations for business continuity, disaster recovery, and data migration

보안 enclave를 사용한 Always Encrypted를 사용하여 데이터베이스의 고가용성 또는 재해 복구 솔루션을 구성하는 경우 모든 데이터베이스 복제본이 보안 enclave를 사용할 수 있는지 확인합니다.When configuring a high availability or disaster recovery solution for a database using Always Encrypted with secure enclaves, make sure that all database replicas can use a secure enclave. 주 복제본에 enclave를 사용할 수 있지만 보조 복제본에 사용할 수 없는 경우에는 보안 enclave를 사용한 Always Encrypted 기능을 사용하려고 시도하는 모든 문이 장애 조치(failover) 후에 실패합니다.If an enclave is available for the primary replica, but not for the secondary replica, any statement that attempts to use the functionality of Always Encrypted with secure enclaves will fail after the failover.

보안 enclave를 사용한 Always Encrypted를 사용하여 데이터베이스를 복사하거나 마이그레이션하는 경우 대상 환경이 항상 enclave를 지원하는지 확인합니다.When you copy or migrate a database using Always Encrypted with secure enclaves, make sure the target environment always supports enclaves. 그러지 않으면 enclave를 사용하는 문이 복사본이나 마이그레이션된 데이터베이스에서 작동하지 않습니다.Otherwise, statements that use enclaves will not work on the copy or the migrated database.

유의해야 하는 특정 고려 사항은 다음과 같습니다.Here are the specific considerations you should keep in mind:

  • SQL ServerSQL Server

    • Always On 가용성 그룹을 구성하는 경우, 가용성 그룹의 데이터베이스를 호스트하는 각 SQL Server 인스턴스에서 보안 enclave를 사용한 Always Encrypted를 지원하며 enclave와 증명이 구성되어 있는지 확인합니다.When configuring an Always On availability group, make sure that each SQL Server instance hosting a database in the availability group support Always Encrypted with secure enclaves, and have an enclave and attestation configured.
    • Enclave가 구성되지 않은 SQL Server 인스턴스에서 보안 enclave를 사용한 Always Encrypted의 기능을 사용하는 데이터베이스의 백업 파일을 복원하는 경우 복원 작업이 성공하고, enclave를 사용하지 않는 모든 기능을 사용할 수 있습니다.When restoring from a backup file of a database that uses the functionality of Always Encrypted with secure enclaves on a SQL Server instance that doesn't have the enclave configured, the restore operation will succeed and all the functionality that doesn't rely on the enclave will be available. 그러나 enclave 기능을 사용한 모든 후속 쿼리는 실패하고, 임의 암호화를 사용하는 enclave 사용 열의 인덱스가 유효하지 않게 됩니다.However, any subsequent statement using the enclave functionality will fail, and indexes on enclave-enabled columns using randomized encryption will become invalid. Enclave가 구성되지 않은 인스턴스에서 보안 enclave를 사용한 Always Encrypted를 사용하는 데이터베이스를 연결하는 경우에도 동일하게 적용됩니다.The same applies when attaching a database using Always Encrypted with secure enclaves on the instance that doesn't have the enclave configured.
    • 데이터베이스에 임의 암호화를 사용하는 enclave 사용 열이 포함된 경우 데이터베이스 백업을 만들기 전에 데이터베이스에서 ADR(가속 데이터베이스 복구)을 사용하도록 설정해야 합니다.If your database contains indexes on enclave-enabled columns using randomized encryption, make sure to enable Accelerated database recovery (ADR) in the database before creating a database backup. ADR을 사용하면 데이터베이스를 복원한 후에 인덱스를 비롯한 데이터베이스를 즉시 사용할 수 있습니다.ADR will ensure the database, including the indexes, is available immediately after you restore the database. 자세한 내용은 데이터베이스 복구를 참조하세요.For more information, see Database Recovery.
  • Azure SQL DatabaseAzure SQL Database

    • 활성 지역 복제를 구성할 때 주 데이터베이스가 지원하는 경우 보조 데이터베이스가 보안 enclave를 지원하는지 확인합니다.When configuring active geo-replication, make sure a secondary database supports secure enclaves, if the primary database does.

SQL Server 및 Azure SQL Database에서는 둘 다, bacpac 파일을 사용하여 데이터베이스를 마이그레이션하는 경우 bacpac 파일을 만들기 전에 임의 암호화를 사용하는 enclave 사용 열의 인덱스를 모두 삭제해야 합니다.In both SQL Server and Azure SQL Database, when you migrate your database using a bacpac file, you need to make sure you drop all indexes for enclave-enabled columns using randomized encryption before creating the bacpac file.

알려진 제한 사항Known limitations

보안 enclave를 사용한 Always Encrypted는 enclave 사용 열의 기밀 컴퓨팅 기능에 설명된 대로 인덱스를 통해 바로 암호화 및 더 풍부한 기밀 쿼리를 지원함으로써 Always Encrypted의 몇 가지 제한 사항을 해결합니다.Always Encrypted with secure enclaves addresses some limitations of Always Encrypted by supporting in-place encryption and richer confidential queries with indexes, as explained in Confidential computing capabilities for enclave-enabled columns.

기능 정보에 나열된 Always Encrypted의 다른 모든 제한 사항은 보안 enclave를 사용한 Always Encrypted에도 적용됩니다.All other limitations for Always Encrypted listed in Feature Details also apply to Always Encrypted with secure enclaves.

다음 제한 사항은 보안 enclave를 사용한 Always Encrypted와 관련이 있습니다.The following limitations are specific to Always Encrypted with secure enclaves:

  • 임의 암호화를 사용하는 Enclave 사용 열에는 클러스터형 인덱스를 만들 수 없습니다.Clustered indexes can't be created on enclave-enabled columns using randomized encryption.
  • 임의 암호화를 사용하는 enclave 사용 열은 기본 키 열이 될 수 없으며, 외래 키 제약 조건 또는 고유 키 제약 조건에서 참조할 수 없습니다.Enclave-enabled columns using randomized encryption can't be primary key columns and cannot be referenced by foreign key constraints or unique key constraints.
  • SQL Server 2019 (15.x)SQL Server 2019 (15.x)(이 제한 사항은 Azure SQL DatabaseAzure SQL Database에 적용되지 않음)에서 임의 암호화를 사용하는 enclave 사용 열에서는 중첩된 루프 조인(인덱스 사용, 사용 가능한 경우)만 지원됩니다.In SQL Server 2019 (15.x)SQL Server 2019 (15.x) (this limitation does not apply to Azure SQL DatabaseAzure SQL Database) only nested loop joins (using indexes, if available) are supported on enclave-enabled columns using randomized encryption. 다양한 제품 간 차이점에 관한 자세한 내용은 기밀 쿼리를 참조하세요.For information about other differences among different products, see Confidential queries.
  • 바로 암호화 작업은 동일한 코드 페이지 내의 데이터 정렬 및 null 허용 여부 변경을 제외하고 다른 열 메타데이터 변경과 결합할 수 없습니다.In-place cryptographic operations cannot be combined with any other changes of column metadata, except changing a collation within the same code page and nullability. 예를 들어 단일 ALTER TABLE/ALTER COLUMN Transact-SQL 문에서 열을 암호화하거나 다시 암호화하거나 암호 해독하는 작업과 열의 데이터 형식을 변경하는 작업을 함께 수행할 수는 없습니다.For example, you cannot encrypt, re-encrypt, or decrypt a column AND change a data type of the column in a single ALTER TABLE/ALTER COLUMN Transact-SQL statement. 두 개의 개별 문을 사용합니다.Use two separate statements.
  • 메모리 내 테이블의 열에 대해 enclave 사용 키를 사용할 수 없습니다.Using enclave-enabled keys for columns in in-memory tables isn't supported.
  • 계산 열을 정의하는 식은 임의 암호화를 사용하는 Enclave 사용 열에서 계산을 수행할 수 없습니다(계산이 기밀 쿼리에 나열된 지원되는 작업 중 하나인 경우에도 수행할 수 없음).Expressions defining computed columns cannot perform any computations on enclave-enabled columns using randomized encryption (even if the computations are among the supported operations listed in Confidential queries).
  • 임의 암호화를 사용하는 Enclave 사용 열에서는 LIKE 연산자의 매개 변수에서 이스케이프 문자가 지원되지 않습니다.Escape characters are not supported in parameters of the LIKE operator on enclave-enabled columns using randomized encryption.
  • 암호화 후에 큰 개체가 되는 다음 데이터 형식 중 하나를 사용하는 쿼리 매개 변수가 있는 LIKE 연산자 또는 비교 연산자가 포함된 쿼리는 인덱스를 무시하고 테이블 검사를 수행합니다.Queries with the LIKE operator or a comparison operator that has a query parameter using one of the following data types (that become large objects after encryption) ignore indexes and perform table scans.
    • n이 3,967보다 큰 경우 nchar[n]nvarchar[n]입니다.nchar[n] and nvarchar[n], if n is greater than 3967.
    • n이 7,935보다 큰 경우 char[n], varchar[n], binary[n], varbinary[n]입니다.char[n], varchar[n], binary[n], varbinary[n], if n is greater than 7935.
  • 도구 제한 사항은 다음과 같습니다.Tooling limitations:
    • Enclave 사용 열 마스터 키를 저장할 수 있는 유일한 키 저장소는 Windows 인증서 저장소 및 Azure Key Vault입니다.The only supported key stores for storing enclave-enabled column master keys are Windows Certificate Store and Azure Key Vault.
    • Enclave 사용 키가 포함된 데이터베이스 가져오기/내보내기는 지원되지 않습니다.Importing/exporting databases containing enclave-enabled keys is not supported.
    • ALTER TABLE/ALTER COLUMN을 통해 바로 암호화 작업을 트리거하려면 SSMS에서 쿼리 창을 사용하여 문을 실행해야 합니다. 또는 해당 문을 실행하는 고유한 프로그램을 작성할 수도 있습니다.To trigger an in-place cryptographic operation via ALTER TABLE/ALTER COLUMN, you need to issue the statement using a query window in SSMS, or you can write your own program that issues the statement. 현재 SqlServer PowerShell 모듈의 Set-SqlColumnEncryption cmdlet과 SQL Server Management Studio의 Always Encrypted 마법사는 바로 암호화를 지원하지 않으며, 작업에 사용되는 열 암호화 키가 Enclave 사용 키인 경우에도 암호화 작업을 위해 데이터베이스 외부로 데이터를 이동합니다.Currently, the Set-SqlColumnEncryption cmdlet in the SqlServer PowerShell module and the Always Encrypted wizard in SQL Server Management Studio do not support in-place encryption - they move the data out of the database for cryptographic operations, even if the column encryption keys used for the operations are enclave-enabled.

다음 단계Next steps

참고 항목See also