다음을 통해 공유


투명한 데이터 암호화

보안 시스템 설계, 중요한 자산 암호화 및 데이터베이스 서버 방화벽 구축과 같은 데이터베이스 보호에 도움이 되는 몇 가지 예방 조치를 취할 수 있습니다. 그러나 물리적 미디어(예: 드라이브 또는 백업 테이프)를 도난당한 시나리오의 경우 악의적인 당사자는 데이터베이스를 복원하거나 연결하고 데이터를 찾아볼 수 있습니다. 한 가지 해결 방법은 데이터베이스의 중요한 데이터를 암호화하고 인증서로 데이터를 암호화하는 데 사용되는 키를 보호하는 것입니다. 이렇게 하면 키가 없는 모든 사용자가 데이터를 사용할 수 없지만 이러한 종류의 보호는 미리 계획해야 합니다.

TDE(투명한 데이터 암호화 )는 데이터 및 트랜잭션 로그 파일 및 특수 PDW 로그 파일의 실시간 I/O 암호화 및 암호 해독을 수행합니다. 암호화에는 복구 중에 사용 가능하도록 데이터베이스 부트 레코드에 저장된 DEK(데이터베이스 암호화 키)가 사용됩니다. DEK는 SQL Server PDW의 마스터 데이터베이스에 저장된 인증서를 사용하여 보호되는 대칭 키입니다. TDE는 데이터 및 로그 파일을 의미하는 "유휴" 데이터를 보호하고 다양한 산업에서 확립된 많은 법률, 규정 및 지침을 준수할 수 있는 기능을 제공합니다. 이 기능을 사용하면 소프트웨어 개발자가 기존 애플리케이션을 변경하지 않고 AES 및 3DES 암호화 알고리즘을 사용하여 데이터를 암호화할 수 있습니다.

Important

TDE는 클라이언트와 PDW 간에 이동하는 데이터에 대한 암호화를 제공하지 않습니다. 클라이언트와 SQL Server PDW 간에 데이터를 암호화하는 방법에 대한 자세한 내용은 인증서 프로비저닝을 참조하세요.

TDE는 이동 중이거나 사용 중인 동안 데이터를 암호화하지 않습니다. SQL Server PDW 내의 PDW 구성 요소 간의 내부 트래픽은 암호화되지 않습니다. 메모리 버퍼에 일시적으로 저장된 데이터는 암호화되지 않습니다. 이러한 위험을 완화하려면 SQL Server PDW에 대한 물리적 액세스 및 연결을 제어합니다.

보안이 설정된 후 올바른 인증서를 사용하여 데이터베이스를 복원할 수 있습니다.

참고 항목

TDE용 인증서를 만들 때 연결된 프라이빗 키와 함께 즉시 백업해야 합니다. 인증서를 사용할 수 없게 되거나 다른 서버에서 데이터베이스를 복원하거나 연결해야 하는 경우 인증서와 프라이빗 키를 모두 백업해야 합니다. 그렇지 않으면 데이터베이스를 열 수 없습니다. 데이터베이스에서 TDE를 더 이상 사용하도록 설정하지 않은 경우에도 암호화 인증서를 유지해야 합니다. 데이터베이스가 암호화되지 않더라도 트랜잭션 로그의 일부가 여전히 다시 보호될 수 있으며기본 데이터베이스의 전체 백업이 수행될 때까지 일부 작업에 인증서가 필요할 수 있습니다. 만료 날짜를 초과한 인증서는 TDE를 사용하여 데이터를 암호화하고 암호 해독하는 데 계속 사용할 수 있습니다.

데이터베이스 파일의 암호화는 페이지 수준에서 수행됩니다. 암호화된 데이터베이스의 페이지는 디스크에 기록되기 전에 암호화되고 메모리로 읽을 때 암호가 해독됩니다. TDE는 암호화된 데이터베이스의 크기를 늘리지 않습니다.

다음 그림에서는 TDE 암호화에 대한 키의 계층 구조를 보여 줍니다.

Displays the hierarchy

투명한 데이터 암호화 사용

TDE를 사용하려면 다음 단계를 수행합니다. 처음 세 단계는 TDE를 지원하도록 SQL Server PDW를 준비할 때 한 번만 수행됩니다.

  1. master 데이터베이스에 마스터 키를 만듭니다.

  2. sp_pdw_database_encryption 사용하여 SQL Server PDW에서 TDE를 사용하도록 설정합니다. 이 작업은 향후 임시 데이터를 보호하기 위해 임시 데이터베이스를 수정하며, 임시 테이블이 있는 활성 세션이 있을 때 시도하면 실패합니다. sp_pdw_database_encryption PDW 시스템 로그에서 사용자 데이터 마스킹을 켭니다. (PDW 시스템 로그의 사용자 데이터 마스킹에 대한 자세한 내용은 sp_pdw_log_user_data_masking 참조하세요.)

  3. sp_pdw_add_network_credentials 사용하여 인증서 백업이 저장될 공유에 인증하고 쓸 수 있는 자격 증명을 만듭니다. 의도한 스토리지 서버에 대한 자격 증명이 이미 있는 경우 기존 자격 증명을 사용할 수 있습니다.

  4. master 데이터베이스에서 마스터 키로 보호되는 인증서를 만듭니다.

  5. 스토리지 공유에 인증서를 백업합니다.

  6. 사용자 데이터베이스에서 데이터베이스 암호화 키를 만들고 master 데이터베이스에 저장된 인증서로 보호합니다.

  7. 문을 ALTER DATABASE 사용하여 TDE를 사용하여 데이터베이스를 암호화합니다.

다음 예제에서는 SQL Server PDW에서 만든 인증서MyServerCert를 사용하여 데이터베이스를 암호화하는 AdventureWorksPDW2012 방법을 보여 줍니다.

첫 번째: SQL Server PDW에서 TDE를 사용하도록 설정합니다. 이 작업은 한 번만 필요합니다.

USE master;  
GO  
  
-- Create a database master key in the master database  
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>';  
GO  
  
-- Enable encryption for PDW  
EXEC sp_pdw_database_encryption 1;  
GO  
  
-- Add a credential that can write to the share  
-- A credential created for a backup can be used if you wish  
EXEC sp_pdw_add_network_credentials 'SECURE_SERVER', '<domain>\<Windows_user>', '<password>';  

두 번째: master 데이터베이스에서 인증서를 만들고 백업합니다. 이 작업은 한 번만 필요합니다. 각 데이터베이스에 대해 별도의 인증서를 만들거나(권장) 하나의 인증서로 여러 데이터베이스를 보호할 수 있습니다.

-- Create certificate in master  
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';  
GO  
  
-- Back up the certificate with private key  
BACKUP CERTIFICATE MyServerCert   
    TO FILE = '\\SECURE_SERVER\cert\MyServerCert.cer'  
    WITH PRIVATE KEY   
    (   
        FILE = '\\SECURE_SERVER\cert\MyServerCert.key',  
        ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>'   
    )   
GO  

마지막: DEK를 만들고 ALTER DATABASE를 사용하여 사용자 데이터베이스를 암호화합니다. 이 작업은 TDE로 보호되는 각 데이터베이스에 대해 반복됩니다.

USE AdventureWorksPDW2012;  
GO  
  
CREATE DATABASE ENCRYPTION KEY  
WITH ALGORITHM = AES_128  
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;  
GO  
  
ALTER DATABASE AdventureWorksPDW2012 SET ENCRYPTION ON;  
GO  

암호화 및 암호 해독 작업은 SQL Server의 백그라운드 스레드에서 예약됩니다. 이 문서의 뒷부분에 나오는 목록의 카탈로그 뷰 및 동적 관리 뷰를 사용하여 이러한 작업의 상태 볼 수 있습니다.

주의

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

명령 및 함수

다음 문에서 수락하려면 데이터베이스 마스터 키로 TDE 인증서를 암호화해야 합니다.

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

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

카탈로그 뷰 및 동적 관리 뷰

다음 표에서는 TDE 카탈로그 뷰 및 동적 관리 뷰를 보여줍니다.

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

사용 권한

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

TDE와 관련된 메타데이터를 보려면 권한이 필요합니다 CONTROL SERVER .

고려 사항

데이터베이스 암호화 작업에 대한 다시 암호화 검사가 진행되는 동안 데이터베이스에 대한 기본 테넌트 작업은 사용하지 않도록 설정됩니다.

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

제한 사항

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

  • 데이터베이스를 삭제합니다.

  • ALTER DATABASE 명령을 사용합니다.

  • 데이터베이스 백업을 시작합니다.

  • 데이터베이스 복원을 시작합니다.

다음 작업 또는 조건은 , ALTER DATABASE ENCRYPTION KEY또는 DROP DATABASE ENCRYPTION KEYALTER DATABASE...SET ENCRYPTION 문을 방지CREATE DATABASE ENCRYPTION KEY합니다.

  • ALTER DATABASE 명령이 실행되고 있습니다.

  • 모든 데이터 백업이 실행 중입니다.

데이터베이스 파일을 만들 때 TDE를 사용하는 경우 즉시 파일 초기화를 사용할 수 없습니다.

TDE로 보호되지 않는 영역

TDE는 외부 테이블을 보호하지 않습니다.

TDE는 진단 세션을 보호하지 않습니다. 사용자는 진단 세션을 사용하는 동안 중요한 매개 변수를 사용하여 쿼리하지 않도록 주의해야 합니다. 중요한 정보를 표시하는 진단 세션은 더 이상 필요하지 않은 즉시 삭제해야 합니다.

TDE로 보호되는 데이터는 SQL Server PDW 메모리에 배치될 때 암호가 해독됩니다. 메모리 덤프는 어플라이언스 특정 문제가 발생할 때 생성됩니다. 덤프 파일은 문제 발생 시 메모리의 콘텐츠를 나타내며 암호화되지 않은 형식으로 중요한 데이터를 포함할 수 있습니다. 메모리 덤프의 내용은 다른 사용자와 공유되기 전에 검토해야 합니다.

마스터 데이터베이스는 TDE로 보호되지 않습니다. master 데이터베이스에는 사용자 데이터가 포함되지 않지만 로그인 이름과 같은 정보가 포함됩니다.

투명한 데이터 암호화 및 트랜잭션 로그

데이터베이스에서 TDE를 사용하도록 설정하면 가상 트랜잭션 로그의 일부를 다시 기본 다음 가상 트랜잭션 로그를 강제로 적용할 수 있습니다. 이렇게 하면 데이터베이스가 암호화되도록 설정된 후 트랜잭션 로그에 명확한 텍스트가 남아 있지 않습니다. 다음 예제와 같이 보기에서 열을 확인 encryption_state 하여 각 PDW 노드에서 로그 파일 암호화의 sys.dm_pdw_nodes_database_encryption_keys 상태 찾을 수 있습니다.

WITH dek_encryption_state AS   
(  
    SELECT ISNULL(db_map.database_id, dek.database_id) AS database_id, encryption_state  
    FROM sys.dm_pdw_nodes_database_encryption_keys AS dek  
        INNER JOIN sys.pdw_nodes_pdw_physical_databases AS node_db_map  
           ON dek.database_id = node_db_map.database_id AND dek.pdw_node_id = node_db_map.pdw_node_id  
        LEFT JOIN sys.pdw_database_mappings AS db_map  
            ON node_db_map .physical_name = db_map.physical_name  
        INNER JOIN sys.dm_pdw_nodes AS nodes  
            ON nodes.pdw_node_id = dek.pdw_node_id  
    WHERE dek.encryptor_thumbprint <> 0x  
)  
SELECT TOP 1 encryption_state  
       FROM dek_encryption_state  
       WHERE dek_encryption_state.database_id = DB_ID('AdventureWorksPDW2012 ')  
       ORDER BY (CASE encryption_state WHEN 3 THEN -1 ELSE encryption_state END) DESC;  

데이터베이스 암호화 키를 변경하기 전에 트랜잭션 로그에 기록된 모든 데이터는 이전 데이터베이스 암호화 키를 사용하여 암호화됩니다.

PDW 활동 로그

SQL Server PDW는 기본 문제 해결을 위한 로그 집합을 확인합니다. 트랜잭션 로그, SQL Server 오류 로그 또는 Windows 이벤트 로그가 아닙니다. 이러한 PDW 활동 로그는 전체 문을 지우기 텍스트로 포함할 수 있으며, 그 중 일부는 사용자 데이터를 포함할 수 있습니다. 일반적인 예는 INSERTUPDATE 문입니다. 사용자 데이터의 마스킹은 sp_pdw_log_user_data_masking 사용하여 명시적으로 켜거나 끌 수 있습니다. SQL Server PDW에서 암호화를 사용하도록 설정하면 이를 보호하기 위해 PDW 활동 로그에서 사용자 데이터의 마스킹이 자동으로 켜집니다. sp_pdw_log_user_data_masking TDE를 사용하지 않을 때 문을 마스킹하는 데 사용할 수도 있지만 Microsoft 지원 팀에서 문제를 분석하는 기능이 크게 줄어들기 때문에 권장되지 않습니다.

투명한 데이터 암호화 및 tempdb 시스템 데이터베이스

tempdb 시스템 데이터베이스는 sp_pdw_database_encryption 사용하여 암호화를 사용하는 경우 암호화됩니다. 데이터베이스에서 TDE를 사용하려면 이 작업이 필요합니다. 이는 SQL Server PDW의 동일한 인스턴스에서 암호화되지 않은 데이터베이스의 성능에 영향을 미칠 수 있습니다.

키 관리

DEK(데이터베이스 암호화 키)는 master 데이터베이스에 저장된 인증서로 보호됩니다. 이러한 인증서는 master 데이터베이스의 DMK(데이터베이스 마스터 키)로 보호됩니다. TDE에 사용하려면 DMK를 SMK(서비스 마스터 키)로 보호해야 합니다.

시스템은 사람의 개입 없이 키에 액세스할 수 있습니다(예: 암호 제공). 인증서를 사용할 수 없는 경우 시스템에서 적절한 인증서를 사용할 수 있을 때까지 DEK의 암호를 해독할 수 없음을 설명하는 오류를 출력합니다.

데이터베이스를 한 어플라이언스 다른 데이터베이스로 이동할 때 해당 DEK를 보호하는 데 사용되는 인증서는 먼저 대상 서버에서 복원되어야 합니다. 그런 다음 데이터베이스를 평소와 같이 복원할 수 있습니다. 자세한 내용은 TDE로 보호된 데이터베이스를 다른 SQL Server로 이동에서 표준 SQL Server 설명서를 참조하세요.

DEK를 암호화하는 데 사용되는 인증서는 사용하는 데이터베이스 백업이 있는 한 보존되어야 합니다. 프라이빗 키가 없으면 데이터베이스 복원에 인증서를 사용할 수 없으므로 인증서 백업에는 인증서 프라이빗 키가 포함되어야 합니다. 이러한 인증서 프라이빗 키 백업은 인증서 복원을 위해 제공해야 하는 암호로 보호되는 별도의 파일에 저장됩니다.

master 데이터베이스 복원

재해 복구의 일환으로 DWConfig를 사용하여 마스터 데이터베이스를 복원할 수 있습니다.

  • 제어 노드가 변경되지 않은 경우 즉, 마스터 데이터베이스의 백업이 수행된 것과 동일하고 변경되지 않은 어플라이언스 마스터 데이터베이스를 복원하는 경우 추가 작업 없이 DMK 및 모든 인증서를 읽을 수 있습니다.

  • 마스터 데이터베이스가 다른 어플라이언스 복원되거나 master 데이터베이스 백업 이후 컨트롤 노드가 변경된 경우 DMK를 다시 생성하려면 추가 단계가 필요합니다.

    1. DMK를 엽니다.

      OPEN MASTER KEY DECRYPTION BY PASSWORD = '<password>';  
      
    2. SMK로 암호화를 추가합니다.

      ALTER MASTER KEY   
          ADD ENCRYPTION BY SERVICE MASTER KEY;  
      
    3. 어플라이언스 다시 시작합니다.

Virtual Machines 업그레이드 및 바꾸기

VM 업그레이드 또는 바꾸기가 수행된 어플라이언스 DMK가 있는 경우 DMK 암호를 매개 변수로 제공해야 합니다.

업그레이드 작업의 예입니다. DMK 암호로 대체 ********** 합니다.

setup.exe /Action=ProvisionUpgrade ... DMKPassword='**********'

가상 머신을 대체하는 작업의 예입니다.

setup.exe /Action=ReplaceVM ... DMKPassword='**********'

업그레이드하는 동안 사용자 DB가 암호화되고 DMK 암호가 제공되지 않으면 업그레이드 작업이 실패합니다. 교체하는 동안 DMK가 있을 때 올바른 암호가 제공되지 않으면 작업은 DMK 복구 단계를 건너뜁니다. 다른 모든 단계는 VM 바꾸기 작업이 끝날 때 완료되지만 작업은 마지막에 실패를 보고하여 추가 단계가 필요함을 나타냅니다. 설치 로그(\ProgramData\Microsoft\Microsoft SQL Server 병렬 데이터 웨어하우스\100\Logs\Setup\\<time-stamp>\Detail-Setup에 있음)에서 다음 경고가 끝부분에 표시됩니다.

*** WARNING \*\*\* DMK is detected in master database, but could not be recovered automatically! The DMK password was either not provided or is incorrect!

PDW에서 이러한 문을 수동으로 실행하고 DMK를 복구하기 위해 어플라이언스 다시 시작합니다.

OPEN MASTER KEY DECRYPTION BY PASSWORD = '<DMK password>';  
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY;  

master Database 단락 복원의 단계를 사용하여 데이터베이스를 복구한 다음 어플라이언스 다시 시작합니다.

DMK가 이전에 존재했지만 작업 후에 복구되지 않은 경우 데이터베이스를 쿼리할 때 다음 오류 메시지가 발생합니다.

Msg 110806;  
A distributed query failed: Database '<db_name>' cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details.

성능에 미치는 영향

TDE의 성능 영향은 데이터 형식, 데이터 저장 방법 및 SQL Server PDW의 워크로드 작업 유형에 따라 달라집니다. TDE로 보호되는 경우 데이터를 읽은 다음 암호를 해독하거나 데이터를 암호화한 다음 쓰는 I/O는 CPU 집약적인 작업이며 다른 CPU 집약적 작업이 동시에 발생할 때 더 많은 영향을 미칩니다. TDE는 암호화되므로 tempdbTDE는 암호화되지 않은 데이터베이스의 성능에 영향을 줄 수 있습니다. 성능에 대한 정확한 아이디어를 얻으려면 데이터 및 쿼리 작업으로 전체 시스템을 테스트해야 합니다.

다음 링크에는 SQL Server가 암호화를 관리하는 방법에 대한 일반적인 정보가 포함되어 있습니다. 이러한 문서는 SQL Server 암호화를 이해하는 데 도움이 될 수 있지만 이러한 문서에는 SQL Server PDW와 관련된 정보가 없으며 SQL Server PDW에 없는 기능에 대해 설명합니다.

참고 항목

ALTER DATABASE
CREATE MASTER KEY
CREATE DATABASE ENCRYPTION KEY
BACKUP CERTIFICATE
sp_pdw_database_encryption
sp_pdw_database_encryption_regenerate_system_keys
sp_pdw_log_user_data_masking
sys.certificates
sys.dm_pdw_nodes_database_encryption_keys