SQL 암호화 기능이 있는 SQL Server 커넥터를 사용하세요

적용 대상:SQL Server

Azure Key Vault로 보호되는 비대칭 키를 사용하는 일반적인 SQL Server 암호화 활동은 다음 세 가지 영역으로 나뉩니다:

  • Azure Key Vault의 비대칭 키를 사용하여 투명 데이터 암호화(TDE)를 구현합니다.
  • 키 금고에서 비대칭 키를 사용해 백업을 암호화하는 방법.
  • 키 금고에서 비대칭 키를 사용하여 열 수준 암호화를 수행합니다.

이 글의 단계를 따르기 전에 SQL Server용 Azure Key Vault를 사용하여 투명한 데이터 암호화 설정의 1단계부터 4단계까지 완료하세요.

참고

버전 1.0.0.440 및 이전 버전은 교체되었으며 더 이상 운영 환경에서 지원되지 않습니다. 버전 1.0.1.0 이상으로 업그레이드하세요. Microsoft 다운로드 센터에서 최신 버전을 다운로드하고, SQL Server Connector 유지보수 및 문제 해결의 "SQL Server Connector 업그레이드" 섹션에 있는 지침을 따라주세요.

참고

Microsoft Entra ID는 이전에 Azure Active Directory(Azure AD)로 알려졌습니다.

Azure Key Vault의 비대칭 키를 이용한 투명 데이터 암호화

Azure Key Vault를 사용하여 SQL Server용 투명한 데이터 암호화 설정 1단계부터 4단계까지 완료한 후, Azure Key Vault 키를 사용해 데이터베이스 암호화 키를 TDE로 암호화하세요. PowerShell을 이용해 키를 회전시키는 방법에 대한 자세한 내용은 PowerShell을 사용하여 TDE(투명한 데이터 암호화) 보호기 순환을(를) 참조하세요.

중요한

롤오버 후 이전 버전의 키를 삭제하지 마세요. 키가 롤오버될 때, 일부 데이터는 오래된 데이터베이스 백업, 백업된 로그 파일, 트랜잭션 로그 파일과 같은 이전 키로 여전히 암호화되어 있습니다.

자격 증명과 로그인, 그리고 데이터베이스의 데이터와 로그를 암호화하는 데이터베이스 암호화 키를 만들어야 합니다. 데이터베이스를 암호화하려면 데이터베이스에 대한 CONTROL 권한이 필요합니다. 다음 그래픽은 Azure Key Vault를 사용할 때 암호화 키의 계층 구조를 보여줍니다.

Azure Key Vault를 사용할 때 암호화 키의 계층 구조를 보여주는 다이어그램입니다.

  1. TDE에 사용할 데이터베이스 엔진의 자격 증명 만들기

    데이터베이스 엔진은 데이터베이스 로드 시 Microsoft Entra 애플리케이션 자격 증명을 사용하여 Key Vault에 접근합니다. 부여하는 키 볼트 권한을 제한하려면, 데이터베이스 엔진용으로 다른 클라이언트 ID와 Secret을 1단계: 인증 모델 설정에 설명된 대로 생성하세요.

    아래의 Transact-SQL 스크립트를 다음과 같은 방법으로 수정합니다.

    • Azure Key Vault를 가리키도록 IDENTITY 인수(ContosoDevKeyVault)를 편집합니다.

      • 글로벌 Azure를 사용 중인 경우 IDENTITY에서 인수를 Azure Key Vault의 이름으로 바꿉니다.
      • 예를 들어 Azure Government, 21Vianet에서 운영하는 Azure 또는 Azure 독일 같은 사설 Azure 클라우드를 사용 중이라면, IDENTITY에서 반환된 Vault URI로 인자를 바꾸세요. 키 자격 증명 모음 URI에 https://를 포함하지 마세요.
    • 인수의 SECRET 첫 번째 부분을 1단계: 인증 모델 설정의 Microsoft Entra 애플리케이션 클라이언트 ID로 대체합니다. 이 예제에서 클라이언트 ID는 EF5C8E094D2A4A769998D93440D8115D입니다.

      중요한

      클라이언트 ID에서 하이픈을 제거해야 합니다.

    • 1단계의 SECRET으로 인수의 두 번째 부분을 완성하세요. 이 예에서 클라이언트 시크릿은 ReplaceWithAADClientSecret입니다.

    • SECRET 인수의 최종 문자열은 하이픈이 없는 긴 문자와 숫자의 연속입니다.

    USE master;  
    CREATE CREDENTIAL Azure_EKM_TDE_cred   
        WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplaceWithAADClientSecret'   
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;  
    
  2. TDE용 데이터베이스 엔진에 대한 SQL Server 로그인 만들기

    SQL Server 로그인을 만들고 1단계의 자격 증명을 여기에 추가합니다. 이 Transact-SQL 예제에서는 이전에 가져온 것과 동일한 키를 사용합니다.

    USE master;  
    -- Create a SQL Server login associated with the asymmetric key   
    -- for the Database engine to use when it loads a database   
    -- encrypted by TDE.  
    CREATE LOGIN TDE_Login   
    FROM ASYMMETRIC KEY CONTOSO_KEY;  
    GO   
    
    -- Alter the TDE Login to add the credential for use by the   
    -- Database Engine to access the key vault  
    ALTER LOGIN TDE_Login   
    ADD CREDENTIAL Azure_EKM_TDE_cred ;  
    GO  
    
  3. 데이터베이스 암호화 키(DEK) 생성

    DEK는 데이터베이스 인스턴스에서 데이터와 로그 파일을 암호화하고, DEK 자체는 Azure Key Vault 비대칭 키로 암호화됩니다. SQL Server가 지원하는 어떤 알고리즘이나 키 길이를 사용해 DEK를 만들 수 있습니다.

    USE ContosoDatabase;  
    GO  
    
    CREATE DATABASE ENCRYPTION KEY   
    WITH ALGORITHM = AES_256   
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;  
    GO  
    
  4. TDE를 켜세요

    -- Alter the database to enable transparent data encryption.  
    ALTER DATABASE ContosoDatabase   
    SET ENCRYPTION ON;  
    GO  
    

    Management Studio를 사용해 개체 탐색기로 데이터베이스에 연결하여 TDE가 활성화되었는지 확인하세요. 데이터베이스를 우클릭한 후 작업을 가리킨 다음 데이터베이스 암호화 관리를 선택하세요.

    > 작업 데이터베이스 암호화 관리가 선택된 개체 탐색기 보여 주는 스크린샷입니다.

    데이터베이스 암호화 관리 대화 상자에서 TDE가 켜져 있고 DEK를 암호화하는 비대칭 키가 무엇인지 확인합니다.

    데이터베이스 암호화 설정 옵션이 선택되고 Now TDE가 켜져 있는 노란색 배너가 있는 데이터베이스 암호화 관리 대화 상자의 스크린샷.

    또는 다음 Transact-SQL 스크립트를 실행할 수 있습니다. 3의 암호화 상태는 암호화된 데이터베이스를 나타냅니다.

    USE MASTER  
    SELECT * FROM sys.asymmetric_keys  
    
    -- Check which databases are encrypted using TDE  
    SELECT d.name, dek.encryption_state   
    FROM sys.dm_database_encryption_keys AS dek  
    JOIN sys.databases AS d  
         ON dek.database_id = d.database_id;  
    

    참고

    tempdb 데이터베이스가 TDE를 사용하도록 설정할 때마다 데이터베이스가 자동으로 암호화됩니다.

키 금고에서 비대칭 키를 사용해 백업을 암호화하기

암호화된 백업은 SQL Server 2014 (12.x)부터 지원됩니다. 다음 예시는 키 금고의 비대칭 키가 보호하는 데이터 암호화 키로 암호화된 백업을 생성하고 복원합니다.

데이터베이스 엔진은 데이터베이스 로드 시 Microsoft Entra 애플리케이션 자격 증명을 사용하여 키 자격 증명 모음에 접근합니다. 부여하는 키 볼트 권한을 제한하려면, 데이터베이스 엔진용으로 다른 클라이언트 ID와 Secret을 1단계: 인증 모델 설정에 설명된 대로 생성하세요.

  1. 백업 암호화를 위해 데이터베이스 엔진용 SQL Server 자격 증명을 생성하세요

    아래의 Transact-SQL 스크립트를 다음과 같은 방법으로 수정합니다.

    • Azure Key Vault를 가리키도록 IDENTITY 인수(ContosoDevKeyVault)를 편집합니다.

      • 글로벌 Azure를 사용 중인 경우 IDENTITY에서 인수를 Azure Key Vault의 이름으로 바꿉니다.
      • 예를 들어 Azure Government, 21Vianet이 운영하는 Microsoft Azure 또는 Azure 독일와 같은 프라이빗 Azure 클라우드를 사용 중인 경우, IDENTITY에서 반환된 Vault URI로 인수를 바꾸세요. 키 자격 증명 모음 URI에 https://를 포함하지 마세요.
    • SECRET 인수의 첫 번째 부분을 1단계: 인증 모델 설정의 Microsoft Entra 애플리케이션 클라이언트 ID로 바꿉니다. 이 예제에서 클라이언트 ID는 EF5C8E094D2A4A769998D93440D8115D입니다.

      중요한

      클라이언트 ID에서 하이픈을 제거해야 합니다.

    • 1단계의 SECRET으로 인수의 두 번째 부분을 완성하세요. 이 예에서 클라이언트 시크릿은 Replace-With-AAD-Client-Secret입니다. 이 인수의 SECRET 마지막 문자열은 하이픈이 없는 긴 문자와 숫자의 연속입니다.

      USE master;  
      
      CREATE CREDENTIAL Azure_EKM_Backup_cred   
          WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
          SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret'   
      FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;    
      
  2. 백업 암호화를 위해 데이터베이스 엔진용 SQL Server 로그인 생성

    데이터베이스 엔진에서 암호화 백업에 사용할 SQL Server 로그인을 만들고 1단계의 자격 증명을 추가합니다. 이 Transact-SQL 예제에서는 이전에 가져온 것과 동일한 키를 사용합니다.

    중요한

    이미 그 키를 TDE(앞서 언급한 예시)나 열 수준 암호화(다음 예시)에 사용했다면, 백업 암호화에 같은 비대칭 키를 사용할 수 없습니다.

    이 예시는 키 금고에 저장된 CONTOSO_KEY_BACKUP 비대칭 키를 사용하며, 이 키는 master에 설명된 대로 데이터베이스에 대해 앞서 가져오거나 만들 수 있습니다.

    USE master;  
    
    -- Create a SQL Server login associated with the asymmetric key   
    -- for the Database engine to use when it is encrypting the backup.  
    CREATE LOGIN Backup_Login   
    FROM ASYMMETRIC KEY CONTOSO_KEY_BACKUP;  
    GO   
    
    -- Alter the Encrypted Backup Login to add the credential for use by   
    -- the Database Engine to access the key vault  
    ALTER LOGIN Backup_Login   
    ADD CREDENTIAL Azure_EKM_Backup_cred ;  
    GO  
    
  3. 데이터베이스를 백업합니다

    데이터베이스를 백업하고, 키 금고에 저장된 비대칭 키로 암호화를 지정합니다.

    다음 예에서, 데이터베이스가 이미 TDE로 암호화되어 있고 비대칭 키 CONTOSO_KEY_BACKUP 가 TDE 비대칭 키와 다른다면, 백업은 TDE 비대칭 키와 CONTOSO_KEY_BACKUP두 가지 모두에 의해 암호화된다는 점을 유의하세요. 대상 SQL Server 인스턴스는 백업을 해독하는 데 두 키가 모두 필요합니다.

    USE master;  
    
    BACKUP DATABASE [DATABASE_TO_BACKUP]  
    TO DISK = N'[PATH TO BACKUP FILE]'   
    WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD,   
    ENCRYPTION(ALGORITHM = AES_256,   
    SERVER ASYMMETRIC KEY = [CONTOSO_KEY_BACKUP]);  
    GO  
    
  4. 데이터베이스를 복원

    TDE로 암호화된 데이터베이스 백업을 복원하려면, 대상 SQL Server 인스턴스는 먼저 암호화에 사용되는 비대칭 Key Vault 키의 복사본을 가지고 있어야 합니다. 그 사본을 제공하려면:

    • TDE에 사용된 원래 비대칭 키가 더 이상 키 금고에 없으면, 키 자격 증명 모음 키 백업을 복원하거나 로컬 HSM에서 키를 다시 가져오세요. 키의 지문이 데이터베이스 백업에 기록된 지문과 일치하려면, 키는 원래 사용했던 것과 동일한 키 금고 키 이름을 사용해야 합니다.

    • 대상 SQL Server 인스턴스에 1단계와 2단계를 적용하세요.

    • 대상 SQL Server 인스턴스가 백업 암호화에 사용되는 비대칭 키에 액세스할 수 있게 되면 서버에서 데이터베이스를 복원합니다.

    샘플 복원 코드입니다.

    RESTORE DATABASE [DATABASE_TO_BACKUP]  
    FROM DISK = N'[PATH TO BACKUP FILE]'   
        WITH FILE = 1, NOUNLOAD, REPLACE;  
    GO  
    

    백업 옵션에 대한 자세한 내용은 (Transact-SQL)를 참조하세요BACKUP.

키 금고에서 비대칭 키를 사용하는 열 수준 암호화

다음 예제에서는 키 자격 증명 모음 내의 비대칭 키로 보호되는 대칭 키를 만듭니다. 대칭 키는 데이터베이스 내 데이터를 암호화합니다.

중요한

이미 백업 암호화에 같은 비대칭 키를 사용했다면, 열 단위 암호화에 같은 키를 사용할 수 없습니다.

이 예시는 CONTOSO_KEY_COLUMNS 키 금고에 저장된 비대칭 키를 사용하며, 2단계: 키 금고 만들기에서 설명한 대로 미리 가져오거나 만든 키입니다. ContosoDatabase 데이터베이스에서 이 비대칭 키를 사용하려면, ContosoDatabase 데이터베이스가 해당 키에 대한 참조를 갖도록 CREATE ASYMMETRIC KEY 문을 다시 실행하십시오.

USE [ContosoDatabase];  
GO  
  
-- Create a reference to the key in the key vault  
CREATE ASYMMETRIC KEY CONTOSO_KEY_COLUMNS   
FROM PROVIDER [AzureKeyVault_EKM_Prov]  
WITH PROVIDER_KEY_NAME = 'ContosoDevRSAKey2',  
CREATION_DISPOSITION = OPEN_EXISTING;  
  
-- Create the data encryption key.  
-- The data encryption key can be created using any SQL Server   
-- supported algorithm or key length.  
-- The DEK will be protected by the asymmetric key in the key vault  
  
CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY  
    WITH ALGORITHM=AES_256  
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;  
  
DECLARE @DATA VARBINARY(MAX);  
  
--Open the symmetric key for use in this session  
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY   
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;  
  
--Encrypt syntax  
SELECT @DATA = ENCRYPTBYKEY  
    (  
    KEY_GUID('DATA_ENCRYPTION_KEY'),   
    CONVERT(VARBINARY,'Plain text data to encrypt')  
    );  
  
-- Decrypt syntax  
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));  
  
--Close the symmetric key  
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;