SQL 암호화 기능을 통해 SQL Server 커넥터 사용

적용 대상:SQL Server

Azure Key Vault로 보호되는 비대칭 키를 사용하는 일반적인 SQL Server 암호화 작업에는 다음 세 가지 영역이 포함됩니다.

  • Azure Key Vault에서 비대칭 키를 사용하여 투명한 데이터 암호화

  • Key Vault에서 비대칭 키를 사용하여 백업 암호화

  • Key Vault에서 비대칭 키를 사용하여 열 수준 암호화

이 항목의 단계를 따르기 전에 Azure Key Vault를 사용하여 확장 가능한 키 관리를 위한 항목 설정 단계의 IV를 통해 전체 파트를 수행합니다.

참고 항목

버전 1.0.0.440 이상이 대체되었으며 프로덕션 환경에서 더 이상 지원되지 않습니다. Microsoft 다운로드 센터를 방문하고 "SQL Server 커넥터 업그레이드" 아래의 SQL Server 커넥터 유지 관리 및 문제 해결 페이지에 있는 지침을 사용하여 1.0.1.0 이상 버전으로 업그레이드하세요.

참고 항목

Microsoft Entra ID 는 이전에 Azure AD(Azure Active Directory)라고 했습니다.

Azure Key Vault에서 비대칭 키를 사용하여 투명한 데이터 암호화

Azure Key Vault를 사용하여 확장 가능한 키 관리에 대한 토픽 설정 단계의 IV를 통해 파트 I를 완료한 후 Azure Key Vault 키를 사용하여 TDE를 사용하여 데이터베이스 암호화 키를 암호화합니다. PowerShell을 사용하여 키를 회전하는 방법에 대한 자세한 내용은 PowerShell을 사용하여 TDE(투명한 데이터 암호화) 보호기 회전을 참조하세요.

Important

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

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

Diagram showing the hierarchy of the encryption key when using the Azure Key Vault.

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

    데이터베이스 엔진 데이터베이스 로드 중에 Microsoft Entra 애플리케이션 자격 증명을 사용하여 Key Vault에 액세스합니다. 데이터베이스 엔진 대해 1단계에서 설명한 대로 다른 클라이언트 ID비밀을 만들어 부여된 Key Vault 권한을 제한하는 것이 좋습니다.

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

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

      • 전역 Azure를 사용하는 경우 인수를 IDENTITY 파트 II의 Azure Key Vault 이름으로 바꿉니다.
      • 프라이빗 Azure 클라우드(예: Azure Government, 21Vianet에서 운영하는 Azure 또는 Azure Germany)를 사용하는 경우 인수를 파트 II, 3단계에서 반환되는 자격 증명 모음 URI로 바꿉 IDENTITY 니다. 자격 증명 모음 URI에 "https://"을 포함하지 마세요.
    • 인수의 SECRET 첫 번째 부분을 1단계의 Microsoft Entra 애플리케이션 클라이언트 ID로 바꿉니다. 이 예제에서 클라이언트 ID.입니다EF5C8E094D2A4A769998D93440D8115D.

      Important

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

    • 1부의 클라이언트 암호를 사용하여 인수SECRET 두 번째 부분을 완료합니다. 이 예제에서는 1부의 클라이언트 암호입니다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은 데이터베이스 인스턴스의 데이터 및 로그 파일을 암호화하고, Azure 주요 자격 증명 모음 비대칭 키로 암호화될 수 있습니다. DEK는 SQL Server 지원 알고리즘 또는 키 길이를 사용하여 만들 수 있습니다.

    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가 켜져 있는지 확인합니다. 데이터베이스를 마우스 오른쪽 단추로 클릭하고 작업을 가리킨 다음 데이터베이스 암호화 관리를 클릭합니다.

    Screenshot showing Object Explorer with Tasks > Manage Database Encryption selected.

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

    Screenshot of the Manage Database Encryption dialog box with the Set Database Encryption On option selected and a yellow banner that says Now TDE is turned on.

    또는 다음 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를 사용하도록 설정할 때마다 데이터베이스가 자동으로 암호화됩니다.

Key Vault에서 비대칭 키를 사용하여 백업 암호화

암호화된 백업은 SQL Server 2014(12.x)부터 지원됩니다. 다음 예제에서는 키 자격 증명 모음에서 비대칭 키로 보호되는 데이터 암호화 키로 암호화된 백업을 만들고 복원합니다.
데이터베이스 엔진 데이터베이스 로드 중에 Microsoft Entra 애플리케이션 자격 증명을 사용하여 Key Vault에 액세스합니다. 데이터베이스 엔진 대해 1단계에서 설명한 대로 다른 클라이언트 ID비밀을 만들어 부여된 Key Vault 권한을 제한하는 것이 좋습니다.

  1. 백업 암호화에 사용할 데이터베이스 엔진 대한 SQL Server 자격 증명 만들기

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

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

      • 전역 Azure를 사용하는 경우 인수를 IDENTITY 파트 II의 Azure Key Vault 이름으로 바꿉니다.
      • 프라이빗 Azure 클라우드(예: Azure Government, 21Vianet에서 운영하는 Microsoft Azure 또는 Azure Germany)를 사용하는 경우 인수를 파트 II, 3단계에서 반환되는 자격 증명 모음 URI로 바꿉 IDENTITY 니다. 자격 증명 모음 URI에 "https://"을 포함하지 마세요.
    • 인수의 SECRET 첫 번째 부분을 1단계의 Microsoft Entra 애플리케이션 클라이언트 ID로 바꿉니다. 이 예제에서 클라이언트 ID.입니다EF5C8E094D2A4A769998D93440D8115D.

      Important

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

    • 1부의 클라이언트 암호를 사용하여 인수SECRET 두 번째 부분을 완료합니다. 이 예제에서는 1부의 클라이언트 암호입니다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 예제에서는 이전에 가져온 것과 동일한 키를 사용합니다.

    Important

    TDE(위의 예제) 또는 열 수준 암호화(다음 예제)에 해당 키를 이미 사용한 경우 백업 암호화에 동일한 비대칭 키를 사용할 수 없습니다.

    이 예제에서는 키 자격 증명 모음에 저장된 비대칭 키를 사용합니다 CONTOSO_KEY_BACKUP . 이 키는 이전 5단계인 IV부로 마스터 데이터베이스에 대해 이전에 가져오거나 만들 수 있습니다.

    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에 사용된 원래 비대칭 키가 더 이상 Key Vault에 없는 경우 Key Vault 키 백업을 복원하거나 로컬 HSM에서 키를 다시 가져옵니다. 중요: 키 지문이 데이터베이스 백업에 기록된 지문과 일치하도록 하려면 키의 원래 이름이 동일한 Key Vault 키 이름과 동일해야 합니다.

    • 대상 SQL Server 인스턴스에 1단계와 2단계를 적용합니다.

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

    샘플 복원 코드:

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

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

Key Vault에서 비대칭 키를 사용하여 열 수준 암호화

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

Important

백업 암호화에 해당 키를 이미 사용한 경우 열 수준 암호화에 동일한 비대칭 키를 사용할 수 없습니다.

이 예제에서는 Azure Key Vault를 사용하여 확장 가능한 키 관리를 위한 설정 단계의 3단계에 설명된 대로 이전에 가져오거나 만들 수 있는 키 자격 증명 모음에 저장된 비대칭 키를 사용합니다CONTOSO_KEY_COLUMNS. 데이터베이스에서 ContosoDatabase 이 비대칭 키를 사용하려면 문을 다시 실행 CREATE ASYMMETRIC KEY 하여 데이터베이스에 ContosoDatabase 키에 대한 참조를 제공해야 합니다.

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;  

참고 항목

Azure Key Vault를 사용하여 확장 가능한 키 관리를 위한 설정 단계
Azure Key Vault를 사용한 확장 가능 키 관리
EKM provider enabled 서버 구성 옵션
SQL Server 커넥터 유지 관리 및 문제 해결