다음을 통해 공유


TDE(투명한 데이터 암호화)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)

투명한 데이터 암호화(TDE)는 SQL Server, Azure SQL 데이터베이스 및 Azure Synapse Analytics 데이터 파일을 암호화합니다. 이 암호화를 미사용 데이터 암호화라고 합니다.

사용자 데이터베이스 보안을 위해 다음과 같은 예방 조치를 취할 수 있습니다.

  • 보안 시스템 설계.
  • 기밀 자산 암호화.
  • 데이터베이스 서버 중심의 방화벽 구축.

그러나 악의적인 사용자가 드라이브 또는 백업 테이프와 같은 물리적 미디어를 도난할 경우, 데이터베이스를 복원하거나 연결하여 그 데이터를 찾아볼 수 있습니다.

한 가지 해결 방법은 데이터베이스의 중요한 데이터를 암호화하고 데이터를 암호화하는 데 사용되는 키를 인증서로 보호하는 것입니다. 이 솔루션은 키가 없는 사용자가 데이터를 사용하지 않도록 방지합니다. 그러나 이러한 종류의 보호는 사전에 계획해야 합니다.

TDE는 데이터 및 로그 파일에 대한 실시간 I/O 암호화 및 암호 해독을 수행합니다. 암호화에는 DEK(데이터베이스 암호화 키)를 사용합니다. 데이터베이스 부팅 레코드는 복구 중에 가용성에 대한 키를 저장합니다. DEK는 대칭 키의 일종으로, 서버의 master 데이터베이스에 저장된 인증서 또는 EKM 모듈로 보호되는 비대칭 키를 사용하여 보호됩니다.

TDE는 데이터 및 로그 파일인 미사용 데이터를 보호합니다. 이를 통해 다양한 산업에서 확립된 여러 법률, 규정 및 지침을 따를 수 있습니다. 이 기능을 사용하면 소프트웨어 개발자는 기존 애플리케이션을 변경하지 않고도 AES 및 3DES 암호화 알고리즘을 사용하여 데이터를 암호화할 수 있습니다.

참고 항목

TDE는 시스템 데이터베이스에 대해 사용할 수 없습니다. 이를 master, model 또는 msdb의 암호화에 사용할 수 없습니다. tempdb은(는) 사용자 데이터베이스가 TDE를 사용하도록 설정한 경우 자동으로 암호화되지만 직접 암호화할 수는 없습니다.

TDE는 여러 통신 채널 간에 암호화를 제공하지 않습니다. 통신 채널을 통해 데이터를 암호화하는 방법은 연결을 암호화하기 위한 SQL Server 데이터베이스 엔진 구성)을 참조하세요.

관련 항목:

TDE 정보

데이터베이스 파일의 암호화는 페이지 수준에서 수행됩니다. 암호화된 데이터베이스의 페이지는 암호화된 후 디스크에 작성되고 메모리로 읽어 들일 때 암호가 해독됩니다. TDE는 암호화된 데이터베이스의 크기를 증가시키지 않습니다.

SQL Database에 적용되는 정보

Azure SQL Database에서 TDE를 사용하는 경우 SQL Database는 master 데이터베이스에 저장되는 서버 수준 인증서를 자동으로 만듭니다. TDE 데이터베이스를 SQL Database로 이동시킬 때, 이동 작업을 위해 데이터베이스의 암호를 해독할 필요가 없습니다. SQL Database 에서 TDE를 사용하는 방법에 대한 자세한 내용은 Azure SQL Database를 사용한 투명한 데이터 암호화를 참조하세요.

SQL Server에 적용되는 정보

데이터베이스 보안을 적용한 후, 올바른 인증서를 사용하여 이를 복원할 수 있습니다. 인증서에 대한 자세한 내용은 SQL Server Certificates and Asymmetric Keys를 참조하십시오.

TDE를 사용하도록 설정한 후 인증서 및 인증서에 연결된 프라이빗 키를 즉시 백업합니다. 인증서를 사용할 수 없게 되거나 다른 서버에서 데이터베이스를 복원하거나 연결하는 경우 인증서와 프라이빗 키의 백업이 필요합니다. 그렇지 않으면 데이터베이스를 열 수 없습니다. 포함된 시스템 데이터베이스에 저장된 인증서도 백업해야 합니다.

데이터베이스에서 TDE를 사용하지 않도록 설정한 경우에도 암호화 인증서를 유지합니다. 데이터베이스는 암호화되지 않지만 트랜잭션 로그의 일부는 계속 보호가 유지될 수 있습니다. 또한 전체 데이터베이스 백업을 수행할 때까지 일부 작업에 대한 인증서가 필요할 수 있습니다.

만료일이 지난 인증서를 계속 사용하여 TDE에서 데이터를 암호화하고 해독할 수 있습니다.

암호화 계층

Windows DPAPI(데이터 보호 API)는 암호화 트리의 루트에 있으며, 컴퓨터 수준에서 키 계층 구조를 보호하고, 데이터베이스 서버 인스턴스의 SMK(서비스 마스터 키)를 보호하는 데 사용됩니다. SMK는 사용자 데이터베이스 수준에 저장되고 인증서 및 비대칭 키를 보호하는 DMK(데이터베이스 마스터 키)를 보호합니다. 그러면 이 키가 데이터를 보호하는 대칭 키를 보호합니다. TDE는 인증서 계층까지 유사한 계층 구조를 사용합니다. TDE를 사용하는 경우 DMK 및 인증서를 master 데이터베이스에 저장해야 합니다. TDE에만 사용되는 DEK(데이터베이스 암호화 키)라는 새 키가 만들어지고 사용자 데이터베이스에 저장됩니다.

다음 그림은 TDE 암호화 아키텍처를 나타낸 것입니다. SQL Database에서 TDE를 사용하는 경우 데이터베이스 수준 항목만(데이터베이스 암호화 키 및 ALTER DATABASE 부분) 사용자가 구성할 수 있습니다.

투명한 데이터 암호화 아키텍처를 나타낸 다이어그램입니다.

TDE 사용

TDE를 사용하려면 다음 단계를 수행합니다.

적용 대상: SQL Server.

  1. 마스터 키를 만듭니다.
  2. 마스터 키로 보호되는 인증서를 만들거나 획득합니다.
  3. 데이터베이스 암호화 키를 만들고 인증서를 사용하여 이를 보호합니다.
  4. 데이터베이스에서 암호화를 사용하도록 설정합니다.

다음 예제에서는 서버에 설치되고 MyServerCert 이름이 지정된 인증서를 사용하여 AdventureWorks2022 데이터베이스를 암호화하고 암호 해독하는 방법을 보여 줍니다.

USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>';
GO
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';
GO
USE AdventureWorks2022;
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
ALTER DATABASE AdventureWorks2022
SET ENCRYPTION ON;
GO

암호화 및 암호 해독 작업은 SQL Server에 의해 백그라운드 스레드로 예약됩니다. 이러한 작업의 상태를 보려면 이 문서의 뒷부분에 나오는 표의 카탈로그 뷰 및 동적 관리 뷰를 사용합니다.

주의

TDE를 사용하도록 설정된 데이터베이스의 백업 파일도 DEK로 암호화됩니다. 따라서 이러한 백업 파일을 복원하려면 DEK를 보호하는 인증서를 사용할 수 있어야 합니다. 즉, 데이터베이스 백업뿐만 아니라 서버 인증서의 백업도 유지 관리해야 합니다. 인증서를 더 이상 사용할 수 없는 경우 데이터가 손실됩니다.

자세한 내용은 SQL Server Certificates and Asymmetric Keys을 참조하세요.

명령 및 함수

다음 문에서 TDE 인증서를 수락하려면 데이터베이스 마스터 키를 사용하여 문을 암호화합니다. 암호로만 암호화하면 명령문에서는 암호기로서 해당 인증서를 거부합니다.

Important

TDE에서 사용한 후 인증서를 암호로 보호하는 경우 다시 시작한 후에는 데이터베이스에 액세스할 수 없게 됩니다.

다음 표에서는 TDE 명령 및 함수에 대한 링크와 설명을 제공합니다.

명령 또는 함수 목적
CREATE DATABASE ENCRYPTION KEY 데이터베이스를 암호화하는 키를 만듭니다
ALTER DATABASE ENCRYPTION KEY 데이터베이스를 암호화하는 키를 변경합니다
DROP DATABASE ENCRYPTION KEY 데이터베이스를 암호화하는 키를 제거합니다
ALTER DATABASE SET 옵션 TDE를 설정하는 데 사용된 ALTER DATABASE 옵션에 대해 설명합니다.

카탈로그 뷰 및 동적 관리 뷰

다음 표에는 TDE 카탈로그 뷰 및 DMV(동적 관리 뷰)가 나와 있습니다.

카탈로그 뷰 또는 동적 관리 뷰 목적
sys.databases 데이터베이스 정보를 보여 주는 카탈로그 뷰입니다
sys.certificates 데이터베이스의 인증서를 보여 주는 카탈로그 뷰
sys.dm_database_encryption_keys 데이터베이스 암호화 키 및 암호화의 상태에 대한 정보를 제공하는 동적 관리 뷰입니다.

사용 권한

각 TDE 기능 및 명령에는 앞서 제시된 표에 설명된 대로 개별 사용 권한 요구 사항이 있습니다.

TDE와 관련된 메타데이터를 보려면 인증서에 대한 VIEW DEFINITION 권한이 필요합니다.

고려 사항

데이터베이스 암호화 작업에 대한 재암호화 검사가 진행되는 동안에는 데이터베이스에 대한 유지 관리 작업이 비활성화됩니다. 데이터베이스에 단일 사용자 모드 설정을 사용하여 유지 관리 작업을 수행할 수 있습니다. 자세한 내용은 데이터베이스를 단일 사용자 모드로 설정을 참조하세요.

sys.dm_database_encryption_keys 동적 관리 뷰를 사용하여 데이터베이스 암호화의 상태를 확인할 수 있습니다. 자세한 내용은 이 문서의 앞부분에 나오는 카탈로그 뷰 및 동적 관리 뷰 섹션을 참조하세요.

TDE에서는 데이터베이스의 모든 파일 및 파일 그룹이 암호화됩니다. 데이터베이스에 READ ONLY(으)로 표시된 파일 그룹이 있는 경우 데이터베이스 암호화 작업이 실패합니다.

데이터베이스를 데이터베이스 미러링이나 로그 전달에 사용하는 경우 두 데이터베이스 모두 암호화됩니다. 로그 트랜잭션은 암호화되어 전송됩니다.

Important

전체 텍스트 인덱스는 데이터베이스에 암호화가 설정될 때 암호화됩니다. SQL Server 2008(10.0.x) 이상 버전은 SQL Server 2005(9.x) 및 이전 버전에서 만든 이러한 인덱스를 데이터베이스로 가져오고 TDE로 암호화합니다.

데이터베이스의 TDE 상태 변경을 모니터링하려면 SQL Server 감사 또는 Azure SQL 데이터베이스 감사를 사용합니다. SQL Server의 경우 TDE는 SQL Server 감사 작업 그룹 DATABASE_OBJECT_CHANGE_GROUP에서 추적되며, 이는 SQL Server 감사 동작 그룹 및 동작에서 찾을 수 있습니다.

제한 사항

초기 데이터베이스 암호화, 키 변경 또는 데이터베이스 암호 해독 중에는 다음 작업이 허용되지 않습니다.

  • 데이터베이스의 파일 그룹에서 파일 삭제하기
  • 데이터베이스 삭제하기
  • 데이터베이스를 오프라인으로 전환하기
  • 데이터베이스 분리하기
  • 데이터베이스 또는 파일 그룹을 READ ONLY 상태로 전환하기

다음 작업은 CREATE DATABASE ENCRYPTION KEY, ALTER DATABASE ENCRYPTION KEY, DROP DATABASE ENCRYPTION KEYALTER DATABASE...SET ENCRYPTION 문 도중에는 허용되지 않습니다.

  • 데이터베이스의 파일 그룹에서 파일 삭제하기
  • 데이터베이스 삭제하기
  • 데이터베이스를 오프라인으로 전환하기
  • 데이터베이스 분리하기
  • 데이터베이스 또는 파일 그룹을 READ ONLY 상태로 전환하기
  • ALTER DATABASE 명령 사용하기
  • 데이터베이스 또는 데이터베이스 파일 백업 시작하기
  • 데이터베이스 또는 데이터베이스 파일 복원 시작하기
  • 스냅숏 만들기

다음 작업 또는 상태의 경우 CREATE DATABASE ENCRYPTION KEY, ALTER DATABASE ENCRYPTION KEY, DROP DATABASE ENCRYPTION KEYALTER DATABASE...SET ENCRYPTION 문이 방지됩니다.

  • 데이터베이스는 읽기 전용이거나 데이터베이스에 읽기 전용 파일 그룹이 포함된 경우
  • ALTER DATABASE 명령이 실행 중입니다.
  • 데이터 백업이 실행 중입니다.
  • 데이터베이스가 오프라인이거나 복원 상태입니다.
  • 스냅샷이 진행 중인 경우
  • 데이터베이스 유지 관리 태스크가 실행 중인 경우

데이터베이스 파일을 만들 때 TDE를 사용하도록 설정하면 인스턴트 파일 초기화를 사용할 수 없습니다.

비대칭 키로 DEK를 암호화하려면 비대칭 키가 확장 가능 키 관리 공급자에 있어야 합니다.

TDE 검사

데이터베이스에서 TDE를 사용하도록 설정하려면 SQL Server에서 암호화 검사를 수행해야 합니다. 검사는 데이터 파일에서 버퍼 풀로 각 페이지를 읽어 온 다음 암호화된 페이지를 디스크에 다시 써 내보냅니다.

암호화 검사에 대한 사용자의 제어권을 강화하기 위해, SQL Server 2019(15.x)에서는 일시 중단 및 다시 시작 구문이 있는 TDE 검사를 도입했습니다. 시스템의 워크로드가 많거나 업무에 중요한 시간 동안에는 검사를 일시 중지한 후 나중에 검사를 다시 시작할 수 있습니다.

TDE 암호화 검사를 일시 중지하려면 다음 구문을 사용합니다.

ALTER DATABASE <db_name> SET ENCRYPTION SUSPEND;

마찬가지로 TDE 암호화 검사를 다시 시작하려면 다음 구문을 사용합니다.

ALTER DATABASE <db_name> SET ENCRYPTION RESUME;

encryption_scan_state 열이 sys.dm_database_encryption_keys 동적 관리 뷰에 추가되었습니다. 암호화 검사의 현재 상태를 표시합니다. 마지막 암호화 검사 상태 변경 날짜와 시간을 포함하는 encryption_scan_modify_date라는 새 열도 있습니다.

암호화 검사가 일시 중단되어 있는 동안 SQL Server 인스턴스가 다시 시작되면 시작 중에 오류 로그에 메시지가 기록됩니다. 메시지는 기존 검사가 일시 중지되었음을 나타냅니다.

Important

TDE 검사 기능 일시 중단 및 다시 시작은 현재 Azure SQL Database, Azure SQL Managed Instance 및 Azure Synapse Analytics에서 사용할 수 있습니다.

TDE 및 트랜잭션 로그

TDE는 미사용 데이터 파일 및 로그 파일을 보호합니다. 암호화되지 않은 데이터베이스에서 TDE를 사용하도록 설정한 후 전체 데이터베이스를 암호화하는 작업은 규모가 큰 데이터 작업이며 소요되는 시간은 이 데이터베이스가 실행 중인 시스템 리소스에 따라 달라집니다. sys.dm_database_encryption_keys DMV를 사용하여 데이터베이스의 암호화 상태를 확인할 수 있습니다.

TDE가 켜지면 데이터베이스 엔진이 새 트랜잭션 로그 생성을 강제 적용하고 이는 데이터베이스 암호화 키로 암호화됩니다. 이전 트랜잭션 또는 TDE 상태 변경 사이에 인터리브된 현재의 장기 실행 트랜잭션에서 생성된 로그는 암호화되지 않습니다.

트랜잭션 로그는 sys.dm_db_log_info DMV를 사용하여 모니터링할 수 있습니다. 또한 이는 Azure SQL 및 SQL Server 2019(15.x) 이상 버전에서 사용할 수 있는 vlf_encryptor_thumbprint 열을 사용해 로그 파일이 암호화되어 있는지 여부를 보여 줍니다. 다음은 sys.dm_database_encryption_keys 뷰에서 encryption_state 열을 사용하여 로그 파일의 암호화 상태를 확인하기 위한 예제 쿼리입니다.

USE AdventureWorks2022;
GO
/* The value 3 represents an encrypted state
   on the database and transaction logs. */
SELECT *
FROM sys.dm_database_encryption_keys
WHERE encryption_state = 3;
GO

SQL Server 로그 파일 아키텍처에 대한 자세한 내용은 트랜잭션 로그를 참조하세요.

DEK가 변경되기 전에 이전 DEK가 트랜잭션 로그에 기록된 모든 데이터를 암호화합니다.

DEK를 두 번 변경하는 경우 DEK를 다시 변경하려면 먼저 로그 백업을 수행해야 합니다.

TDE 및 tempdb 시스템 데이터베이스

SQL Server 인스턴스의 다른 데이터베이스가 TDE를 사용하여 암호화된 경우 tempdb 시스템 데이터베이스가 암호화됩니다. 이 암호화로 인해 동일한 SQL Server 인스턴스의 암호화되지 않은 데이터베이스의 성능에 영향을 미칠 수 있습니다. tempdb 데이터베이스에 대한 자세한 내용은 tempdb 시스템 데이터베이스를 참조하세요.

TDE 및 복제

복제는 TDE 사용 데이터베이스에서 데이터를 자동으로 암호화된 형식으로 복제하지 않습니다. 배포 및 구독자 데이터베이스를 보호하려는 경우 TDE를 별도로 사용하도록 설정합니다.

스냅샷 복제는 BCP 파일 같은 암호화되지 않은 중간 파일에 데이터를 저장할 수 있습니다. 트랜잭션 및 병합 복제에 대한 초기 데이터 배포도 가능합니다. 이러한 복제를 수행하는 동안 암호화를 사용하여 통신 채널을 보호할 수 있습니다.

자세한 내용은 연결 암호화에 대한 SQL Server 데이터베이스 엔진 구성을 참조하세요.

TDE 및 가용성 그룹

Always On 가용성 그룹에 암호화된 데이터베이스를 추가할 수 있습니다.

가용성 그룹의 일부인 데이터베이스를 암호화하려면 먼저 마스터 키와 인증서를 만들거나 모든 보조 복제본에서 EKM(비대칭 키)을 만든 후에 주 복제본에서 데이터베이스 암호화 키를 만들어야 합니다.

인증서를 사용하여 DEK를 보호하는 경우, 주 복제본에서 만든 인증서를 백업한 다음 모든 보조 복제본의 파일에서 인증서를 만든 후 주 복제본에서 DEK를 만들면 됩니다.

TDE 및 FILESTREAM 데이터

TDE를 사용하도록 설정한 경우에도 FILESTREAM 데이터는 암호화되지 않습니다.

TDE 및 백업

인증서는 DEK를 보호하기 위해 일반적으로 투명한 데이터 암호화에서 사용됩니다. 인증서는 master 데이터베이스에 만들어야 합니다. TDE를 사용하도록 설정된 데이터베이스의 백업 파일도 DEK를 사용하여 암호화됩니다. 따라서 이러한 백업 파일에서 복원하려면 DEK를 보호하는 인증서를 사용할 수 있어야 합니다. 즉, 데이터 손실을 방지하기 위해 데이터베이스 백업뿐만 아니라 서버 인증서의 백업도 유지 관리해야 합니다. 인증서를 더 이상 사용할 수 없는 경우 데이터 손실이 발생합니다.

TDE 제거

ALTER DATABASE 문을 사용하여 데이터베이스에서 암호화를 제거합니다.

ALTER DATABASE <db_name> SET ENCRYPTION OFF;

데이터베이스 상태를 보려면 sys.dm_database_encryption_keys 동적 관리 뷰를 사용합니다.

암호 해독이 완료될 때까지 기다린 후에 DROP DATABASE ENCRYPTION KEY를 사용하여 DEK를 제거합니다.

Important

TDE에 사용되는 마스터 키와 인증서를 안전한 위치에 백업합니다. 마스터 키와 인증서는 데이터베이스가 TDE로 암호화될 때 만들어진 백업을 복원하는 데 필요합니다. DEK를 제거한 후에는 로그 백업을 수행한 다음, 암호 해독된 데이터베이스의 새로운 전체 백업을 수행합니다.

TDE 및 버퍼 풀 확장

TDE를 사용하여 데이터베이스를 암호화한 경우에 BPE(버퍼 풀 확장)와 관련된 파일은 암호화되지 않습니다. 이러한 파일의 경우, 파일 시스템 수준에서 BitLocker 또는 EFS와 같은 암호화 도구를 사용합니다.

TDE 및 메모리 내 OLTP

메모리 내 OLTP 개체가 포함된 데이터베이스에서 TDE를 사용하도록 설정할 수 있습니다. SQL Server 2016(13.x) 및 Azure SQL Database에서는 TDE를 사용하도록 설정하면 메모리 내 OLTP 로그 레코드 및 데이터가 암호화됩니다. SQL Server 2014(12.x)에서는 TDE를 사용하도록 설정하면 메모리 내 OLTP 로그 레코드가 암호화되지만 MEMORY_OPTIMIZED_DATA 파일 그룹의 파일은 암호화되지 않습니다.

TDE에서 사용되는 인증서의 관리 지침

데이터베이스가 TDE에 대해 사용하도록 설정되어 있고 로그 전달 또는 데이터베이스 미러링에 사용되는 경우 인증서 및 데이터베이스 마스터 키를 백업해야 합니다. 포함된 시스템 데이터베이스에 저장된 인증서도 백업해야 합니다.

DEK를 보호하는 데 사용되는 인증서는 master 데이터베이스에서 삭제하면 안 됩니다. 그럴 경우 암호화된 데이터베이스에 액세스할 수 없게 됩니다.

명령에 사용된 인증서가 아직 백업되지 않은 경우 CREATE DATABASE ENCRYPTION KEY 실행 후 다음과 같은 메시지(오류 33091)가 발생합니다.

Warning

데이터베이스 암호화 키를 암호화하는 데 사용된 인증서가 백업되지 않았습니다. 인증서 및 인증서와 연결된 프라이빗 키를 즉시 백업해야 합니다. 인증서를 사용할 수 없게 되거나 다른 서버에서 데이터베이스를 복원하거나 연결하는 경우 인증서와 프라이빗 키의 백업이 모두 필요하며 백업이 없다면 데이터베이스를 열 수 없게 됩니다.

다음 쿼리를 사용하여, 생성된 시점부터 백업되지 않은, TDE에서 사용하는 인증서를 식별할 수 있습니다.

SELECT pvt_key_last_backup_date,
    Db_name(dek.database_id) AS encrypteddatabase,
    c.name AS Certificate_Name
FROM sys.certificates c
INNER JOIN sys.dm_database_encryption_keys dek
    ON c.thumbprint = dek.encryptor_thumbprint;

pvt_key_last_backup_date이(가) NULL이면 해당 행에 해당하는 데이터베이스는 TDE에 대해 사용하도록 설정되었지만 DEK를 보호하는 데 사용된 인증서가 백업되지 않았습니다. 인증서 백업에 대한 자세한 내용은 BACKUP CERTIFICATE를 참조하세요.