다음을 통해 공유


다른 SQL Server로 TDE 보호 데이터베이스 이동

적용 대상: SQL Server

이 문서에서는 TDE(투명한 데이터 암호화)를 사용하여 데이터베이스를 보호한 다음 SQL Server Management Studio 또는 Transact-SQL을 사용하여 데이터베이스를 SQL Server의 다른 인스턴스로 이동하는 방법을 설명합니다. TDE는 데이터 및 로그 파일에 대한 실시간 I/O 암호화 및 암호 해독을 수행합니다. 암호화에는 복구 중에 사용 가능하도록 데이터베이스 부트 레코드에 저장된 DEK(데이터베이스 암호화 키)가 사용됩니다. DEK는 서버의 master 데이터베이스에 저장된 인증서 또는 EKM 모듈로 보호되는 비대칭 키를 사용하여 보호되는 대칭 키입니다.

제한 사항

  • TDE로 보호된 데이터베이스를 이동할 때 DEK를 여는 데 사용되는 인증서 또는 비대칭 키도 이동해야 합니다. SQL Server가 데이터베이스 파일에 액세스할 수 있도록 대상 서버의 master 데이터베이스에 인증서 또는 비대칭 키를 설치해야 합니다. 자세한 내용은 TDE(투명한 데이터 암호화)를 참조하세요.

  • 인증서를 복구하려면 인증서 파일과 프라이빗 키 파일의 복사본을 모두 유지해야 합니다. 프라이빗 키의 암호는 데이터베이스 마스터 키 암호와 동일할 필요가 없습니다.

  • SQL Server는 기본적으로 여기서 만든 파일을 C:\Program Files\Microsoft SQL Server\MSSQL<xx>.MSSQLSERVER\MSSQL\DATA에 저장합니다. 여기서 <xx>은(는) 버전 번호입니다.

사용 권한

  • 데이터베이스 마스터 키를 만들려면 master 데이터베이스에 대한 CONTROL DATABASE 권한이 필요합니다.

  • DEK 를 보호하는 인증서를 만들려면 master 데이터베이스에 대한 CREATE CERTIFICATE 권한이 필요합니다.

  • 데이터베이스에 대한 CONTROL DATABASE 권한과 데이터베이스 암호화 키를 암호화하는 데 사용되는 인증서 또는 비대칭 키에 대한 VIEW DEFINITION 권한이 필요합니다.

투명한 데이터 암호화로 보호되는 데이터베이스 만들기

다음 절차에서는 SQL Server Management Studio 및 Transact-SQL을 사용하여 TDE로 보호되는 데이터베이스를 만드는 방법이 나와 있습니다.

SQL Server Management Studio 사용

  1. master 데이터베이스에 데이터베이스 마스터 키 및 인증서 만들기. 자세한 내용은 이 문서의 뒷부분에서 Transact-SQL 사용을 참조하세요.

  2. master 데이터베이스에서 서버 인증서의 백업을 만듭니다. 자세한 내용은 이 문서의 뒷부분에서 Transact-SQL 사용을 참조하세요.

  3. 개체 탐색기에서 데이터베이스 폴더를 마우스 오른쪽 단추로 클릭한 다음, 새 데이터베이스를 선택합니다.

  4. 새 데이터베이스 대화 상자의 데이터베이스 이름 상자에 새 데이터베이스의 이름을 입력합니다.

  5. 소유자 상자에 새 데이터베이스의 소유자 이름을 입력합니다. 또는 줄임표(...)를 선택하여 데이터베이스 소유자 선택 대화 상자를 엽니다. 새 데이터베이스를 만드는 방법에 대한 자세한 내용은 데이터베이스 만들기를 참조하세요.

  6. 개체 탐색기에서 + 기호를 선택해 데이터베이스 폴더를 확장합니다.

  7. 만든 데이터베이스를 마우스 오른쪽 단추로 클릭하고, 마우스로 작업을 가리킨 다음 데이터베이스 암호화 관리를 선택합니다.

    데이터베이스 암호화 관리 대화 상자에 다음과 같은 옵션이 제공됩니다.

    암호화 알고리즘
    데이터베이스 암호화에 사용할 알고리즘을 표시하거나 설정합니다. AES128이 기본 알고리즘입니다. 이 필드는 비워 둘 수 없습니다. 암호화 알고리즘에 대한 자세한 내용은 암호화 알고리즘 선택을 참조하세요.

    서버 인증서 사용
    인증서로 암호화를 보호하도록 설정합니다. 목록에서 1가지를 선택합니다. 서버 인증서에 대한 VIEW DEFINITION 권한이 없는 경우 이 목록이 비어 있습니다. 암호화 방법을 인증서로 선택한 경우 이 값은 비워 둘 수 없습니다. 인증서에 대한 자세한 내용은 SQL Server Certificates and Asymmetric Keys를 참조하십시오.

    서버 비대칭 키 사용
    비대칭 키로 암호화를 보호하도록 설정합니다. 사용 가능한 비대칭 키만 표시됩니다. EKM 모듈에서 보호하는 비대칭 키만 TDE를 사용하여 데이터베이스를 암호화할 수 있습니다.

    데이터베이스 암호화를 켜짐으로 설정
    데이터베이스의 TDE를 설정(선택) 또는 해제(선택 취소)로 변경합니다.

  8. 작업을 마쳤으면 확인을 선택합니다.

Transact-SQL 사용

  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 선택합니다.

  3. 다음 예시를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다.

    -- Create a database master key and a certificate in the master database.
    USE master;
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '*rt@40(FL&dasl1';
    GO
    
    CREATE CERTIFICATE TestSQLServerCert
        WITH SUBJECT = 'Certificate to protect TDE key'
    GO
    
    -- Create a backup of the server certificate in the master database.
    -- The following code stores the backup of the certificate and the private key file in the default data location for this instance of SQL Server
    -- (C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA).
    BACKUP CERTIFICATE TestSQLServerCert TO FILE = 'TestSQLServerCert'
    WITH PRIVATE KEY (
        FILE = 'SQLPrivateKeyFile',
        ENCRYPTION BY PASSWORD = '*rt@40(FL&dasl1'
    );
    GO
    
    -- Create a database to be protected by TDE.
    CREATE DATABASE CustRecords;
    GO
    
    -- Switch to the new database.
    -- Create a database encryption key, that is protected by the server certificate in the master database.
    -- Alter the new database to encrypt the database using TDE.
    USE CustRecords;
    GO
    
    CREATE DATABASE ENCRYPTION KEY
        WITH ALGORITHM = AES_128 ENCRYPTION BY SERVER CERTIFICATE TestSQLServerCert;
    GO
    
    ALTER DATABASE CustRecords
    SET ENCRYPTION ON;
    GO
    

자세한 내용은 다음을 참조하세요.

투명한 데이터 암호화로 보호되는 데이터베이스로 이동

다음 절차에서는 SQL Server Management Studio 및 Transact-SQL을 사용하여 TDE로 보호되는 데이터베이스를 이동하는 방법이 나와 있습니다.

SQL Server Management Studio 사용

  1. 개체 탐색기에서 이전에 암호화한 데이터베이스를 마우스 오른쪽 단추로 클릭하고, 마우스로 작업을 가리킨 다음 분리...를 선택합니다.

    데이터베이스 분리 대화 상자에는 다음과 같은 옵션이 제공됩니다.

    분리할 데이터베이스
    분리할 데이터베이스를 나열합니다.

    데이터베이스 이름
    분리할 데이터베이스의 이름을 표시합니다.

    연결 해제
    지정된 데이터베이스에 대한 연결을 끊습니다.

참고 항목

활성 연결이 있는 데이터베이스는 분리할 수 없습니다.

통계 업데이트
기본적으로 분리 작업은 데이터베이스를 분리할 때 오래된 최적화 통계를 유지합니다. 기존의 최적화 통계를 업데이트하려면 이 확인란을 선택합니다.

전체 텍스트 카탈로그 유지
기본적으로 분리 작업은 데이터베이스와 연결된 모든 전체 텍스트 카탈로그를 유지합니다. 이를 제거하려면 전체 텍스트 카탈로그 유지 확인란의 선택을 취소합니다. 이 옵션은 데이터베이스를 SQL Server 2005(9.x)에서 업그레이드하는 경우에만 표시됩니다.

상태
준비 또는 준비 안 됨 상태 중 하나를 표시합니다.

Message
다음과 같이 메시지 열에 데이터베이스에 대한 정보가 표시될 수도 있습니다.

  • 데이터베이스가 복제와 관련된 경우 상태준비 안 됨이고 메시지 열에는 데이터베이스 복제가 표시됩니다.

  • 데이터베이스에 하나 이상의 활성 연결이 있는 경우 상태준비 안 됨이고 메시지 열에는 <number_of_active_connections>개의 활성 연결(예: 1개의 활성 연결)이 표시됩니다. 데이터베이스를 분리하려면 먼저 연결 삭제를 선택하여 모든 활성 연결을 끊어야 합니다.

메시지에 대한 자세한 내용을 보려면 하이퍼링크로 연결된 텍스트를 선택하여 작업 모니터를 엽니다.

  1. 확인을 선택합니다.

  2. Windows 탐색기를 사용하여 데이터베이스 파일을 원본 서버에서 대상 서버의 동일한 위치로 이동하거나 복사합니다.

  3. Windows 탐색기를 사용하여 서버 인증서 및 프라이빗 키 파일의 백업을 원본 서버에서 대상 서버의 동일한 위치로 이동하거나 복사합니다.

  4. SQL Server 대상 인스턴스에 대해 데이터베이스 마스터 키를 만듭니다. 자세한 내용은 이 문서의 뒷부분에서 Transact-SQL 사용을 참조하세요.

  5. 원본 서버 인증서 백업 파일을 사용하여 서버 인증서를 다시 만듭니다. 자세한 내용은 이 문서의 뒷부분에서 Transact-SQL 사용을 참조하세요.

  6. SQL Server Management Studio의 개체 탐색기에서 데이터베이스를 마우스 오른쪽 단추로 클릭하고 연결...을 선택합니다.

  7. 데이터베이스 연결 대화 상자의 연결할 데이터베이스 아래에서 추가를 선택합니다.

  8. 데이터베이스 파일 찾기 -servername 대화 상자에서 새 서버에 연결할 데이터베이스 파일을 선택하고 확인을 클릭합니다.

    데이터베이스 연결 대화 상자에는 다음과 같은 옵션이 제공됩니다.

    연결할 데이터베이스
    선택된 데이터베이스에 대한 정보를 표시합니다.

    <열 머리글 없음>
    연결 작업의 상태를 나타내는 아이콘이 표시됩니다. 가능한 아이콘은 상태 설명에 설명되어 있습니다.

    MDF 파일 위치
    선택한 MDF 파일의 경로와 파일 이름을 표시합니다.

    데이터베이스 이름
    데이터베이스의 이름을 표시합니다.

    다른 이름으로 연결
    필요에 따라 연결할 데이터베이스의 이름을 다른 이름으로 지정합니다.

    담당자
    가능한 데이터베이스 소유자의 드롭다운 목록을 제공하므로 필요에 따라 다른 소유자를 선택할 수 있습니다.

    상태
    다음 표에 설명된 내용과 같이 데이터베이스의 상태를 표시합니다.

Icon 상태 텍스트 설명
(아이콘 없음) (텍스트 없음) 연결 작업이 시작되지 않았거나 이 개체에 대해 보류 중입니다. 대화 상자가 열릴 때 기본값입니다.
녹색, 오른쪽을 향하고 있는 삼각형 진행 중 연결 작업이 시작되었지만 완료되지 않았습니다.
녹색 확인 표시 Success 개체를 연결했습니다.
흰색 십자가 들어 있는 빨간색 원 Error 연결 작업에 오류가 발생하여 성공적으로 완료되지 않았습니다.
오른쪽과 왼쪽에 두 개의 검정 사분면이 있고 위쪽과 아래쪽에 두 개의 흰색 사분면이 있는 원 Stopped 사용자가 작업을 중지하여 연결 작업이 완료되지 않았습니다.
시계 반대 방향을 가리키는 곡선 모양의 화살표가 있는 원 롤백됨 연결 작업이 성공했지만 다른 개체를 연결하던 중 오류로 인해 롤백되었습니다.

Message
빈 메시지 또는 "파일을 찾을 수 없습니다"라는 하이퍼링크를 표시합니다.

추가
필요한 주 데이터베이스 파일을 찾습니다. 사용자가 .mdf 파일을 선택하면 연결할 데이터베이스 표의 각 필드에 적절한 정보가 자동으로 입력됩니다.

제거
그리드를 첨부할 데이터베이스에서 선택한 파일을 제거합니다.

"<database_name>" 데이터베이스 세부 정보
첨부할 파일의 이름을 표시합니다. 파일의 경로 이름을 확인하거나 변경하려면 찾아보기 단추(...)를 선택합니다.

참고 항목

파일이 없으면 메시지 열에 "찾을 수 없음"이 표시됩니다. 로그 파일을 찾을 수 없는 경우 다른 디렉터리에 있거나 삭제되었습니다. 데이터베이스 세부 정보 약식 표의 파일 경로를 업데이트하여 올바른 위치를 가리키도록 하거나 그리드에서 로그 파일을 제거해야 합니다. .ndf 데이터 파일을 찾을 수 없는 경우, 그리드의 해당 경로가 올바른 위치를 가리키도록 업데이트해야 합니다.

원본 파일 이름
데이터베이스에 속한 첨부 파일의 이름을 표시합니다.

파일 유형
파일, 데이터 또는 로그의 형식을 나타냅니다.

현재 파일 경로
선택한 데이터베이스 파일의 경로를 표시합니다. 경로를 수동으로 편집할 수 있습니다.

Message
빈 메시지 또는 "파일을 찾을 수 없습니다"라는 하이퍼링크를 표시합니다.

Transact-SQL 사용

  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 선택합니다.

  3. 다음 예시를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다.

    -- Detach the TDE protected database from the source server.
    USE master;
    GO
    
    EXEC master.dbo.sp_detach_db @dbname = N'CustRecords';
    GO
    
    -- Move or copy the database files from the source server to the same location on the destination server.
    -- Move or copy the backup of the server certificate and the private key file from the source server to the same location on the destination server.
    -- Create a database master key on the destination instance of SQL Server.
    USE master;
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '*rt@40(FL&dasl1';
    GO
    
    -- Recreate the server certificate by using the original server certificate backup file.
    -- The password must be the same as the password that was used when the backup was created.
    CREATE CERTIFICATE TestSQLServerCert
    FROM FILE = 'TestSQLServerCert'
    WITH PRIVATE KEY (
        FILE = 'SQLPrivateKeyFile',
        DECRYPTION BY PASSWORD = '*rt@40(FL&dasl1'
    );
    GO
    
    -- Attach the database that is being moved.
    -- The path of the database files must be the location where you have stored the database files.
    CREATE DATABASE [CustRecords] ON (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\CustRecords.mdf'),
        (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\CustRecords_log.LDF')
    FOR ATTACH;
    GO
    

자세한 내용은 다음을 참조하세요.