다음을 통해 공유


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

적용 대상: SQL Server

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

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

  • 키 자격 증명 모음에서 비대칭 키를 사용하여 백업 암호화

  • 키 자격 증명 모음에서 칼럼 키를 사용한 투명한 데이터 암호화

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

참고 항목

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

참고 항목

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

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

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

Important

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

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

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

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

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

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

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

      • 글로벌 Azure를 사용 중인 경우 파트 2에서 IDENTITY 인수를 Azure Key Vault의 이름으로 바꿉니다.
      • 비공개 Azure 클라우드(예: Azure Government, 21Vianet에서 운영하는 Microsoft Azure 또는 Azure 독일)를 사용 중인 경우 IDENTITY 인수를 인수를 파트 2, 3단계에서 반환되는 중요 보관소 URI로 바꿉니다. 자격 증명 모음 URI에 “https://”를 포함하지 마세요.
    • SECRET 인수의 첫 번째 부분을 1단계의 Microsoft Entra 애플리케이션 클라이언트 ID로 바꾸세요. 이 예제에서 클라이언트 IDEF5C8E094D2A4A769998D93440D8115D입니다.

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

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

    데이터베이스 암호화 관리 대화 상자에서 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 애플리케이션 자격 증명을 사용하여 키 자격 증명 모음에 액세스합니다. 데이터베이스 엔진 대해 1단계에서 설명한 대로 다른 클라이언트 ID비밀을 만들어 부여된 Key Vault 권한을 제한하는 것이 좋습니다.

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

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

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

      • 글로벌 Azure를 사용 중인 경우 파트 2에서 IDENTITY 인수를 Azure Key Vault의 이름으로 바꿉니다.
      • 비공개 Azure 클라우드(예: Azure Government, 21Vianet에서 운영하는 Microsoft Azure 또는 Azure 독일)를 사용 중인 경우, IDENTITY 인수를 파트 2, 3단계에서 반환되는 Vault URI로 바꿉니다. 자격 증명 모음 URI에 “https://”를 포함하지 마세요.
    • SECRET 인수의 첫 번째 부분을 1단계의 Microsoft Entra 애플리케이션 클라이언트 ID로 바꾸세요. 이 예제에서 클라이언트 IDEF5C8E094D2A4A769998D93440D8115D입니다.

      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(위 예제) 또는 열 수준 암호화(아래 예제)에 해당 키를 사용한 경우 백업 암호화에 대해 동일한 비대칭 키를 사용할 수 없습니다.

    이 예제에서는 앞서 파트 4, 5단계에서 master 데이터베이스에 대해 가져오거나 만들 수 있는 키 자격 증명 모음에 저장된 CONTOSO_KEY_BACKUP 비대칭 키를 사용합니다.

    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 인스턴스에 암호화에 사용되는 비대칭 키 자격 증명 모음 키의 복사본이 있어야 합니다. 이를 수행하기 위한 방법은 다음과 같습니다.

    • TDE에 사용된 원래 비대칭 키가 더 이상 키 자격 증명 모음에 없는 경우 키 자격 증명 모음 키 백업을 복원하거나 로컬 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 인수에 대한 자세한 내용은 BACKUP(Transact-SQL)을 참조하세요.

키 자격 증명 모음에서 칼럼 키를 사용한 투명한 데이터 암호화

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

Important

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

이 예제에서는 이전에 가져왔거나 생성된 키 자격 증명 모음 내 저장된 CONTOSO_KEY_COLUMNS 비대칭 키를 사용합니다. 이는 Azure Key Vault를 사용하여 확장 가능한 키 관리에 대한 설정 단계의 3장, 3단계에 설명되어 있습니다. 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 주요 자격 증명 모음을 사용한 확장 가능 키 관리 설정 단계
Azure Key Vault를 사용한 확장 가능 키 관리
EKM provider enabled 서버 구성 옵션
SQL Server 커넥터 유지 관리 및 문제 해결