다음을 통해 공유


두 서버에서 동일한 대칭 키 만들기

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance

이 주제에서는 Transact-SQL을 사용하여 SQL Server의 서로 다른 두 서버에서 동일한 대칭 키를 만드는 방법에 대해 설명합니다. 암호 텍스트의 암호를 해독하려면 암호화하는 데 사용된 키가 필요합니다. 단일 데이터베이스에서 암호화와 암호 해독이 모두 수행되는 경우 키가 데이터베이스에 저장되며 사용 권한에 따라 암호화와 암호 해독에 모두 사용할 수 있습니다. 그러나 암호화와 암호 해독이 별도의 데이터베이스나 별도의 서버에서 수행되는 경우 한 데이터베이스에 저장된 키를 다른 데이터베이스에서 사용할 수 없습니다.

시작하기 전에

제한 사항

  • 대칭 키를 만들 때 대칭 키는 인증서, 암호, 대칭 키, 비대칭 키 또는 PROVIDER 중 하나 이상을 사용하여 암호화해야 합니다. 키에는 각 유형에 대해 두 개 이상의 암호화가 포함될 수 있습니다. 즉, 여러 인증서, 암호, 대칭 키 및 비대칭 키를 동시에 사용하여 단일 대칭 키를 암호화할 수 있습니다.

  • 데이터베이스 마스터 키의 공개 키 대신 암호를 사용하여 대칭 키를 암호화한 경우 TRIPLE_DES 암호화 알고리즘이 사용됩니다. 따라서 AES와 같은 강력한 암호화 알고리즘을 사용하여 만든 키는 더 약한 알고리즘으로 보호됩니다.

보안

사용 권한

데이터베이스에 대한 ALTER ANY SYMMETRIC KEY 권한이 필요합니다. AUTHORIZATION이 지정된 경우 데이터베이스 사용자에 대한 IMPERSONATE 권한 또는 애플리케이션 역할에 대한 ALTER 권한이 필요합니다. 인증서 또는 비대칭 키를 통한 암호화의 경우에는 해당 인증서 또는 비대칭 키에 대한 VIEW DEFINITION 권한이 필요합니다. Windows 로그인, SQL Server 로그인 및 애플리케이션 역할만 대칭 키를 소유할 수 있습니다. 그룹 및 역할은 대칭 키를 소유할 수 없습니다.

Transact-SQL 사용

서로 다른 두 서버에 동일한 대칭 키 만들기

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

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

  3. 다음 CREATE MASTER KEY, CREATE CERTIFICATE 및 CREATE SYMMETRIC KEY 문을 실행하여 키를 만드세요.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My p@55w0Rd';  
    GO  
    CREATE CERTIFICATE [cert_keyProtection] WITH SUBJECT = 'Key Protection';  
    GO  
    CREATE SYMMETRIC KEY [key_DataShare] WITH  
        KEY_SOURCE = 'My key generation bits. This is a shared secret!',  
        ALGORITHM = AES_256,   
        IDENTITY_VALUE = 'Key Identity generation bits. Also a shared secret'  
        ENCRYPTION BY CERTIFICATE [cert_keyProtection];  
    GO  
    
  4. 별도의 서버 인스턴스에 연결하고, 다른 쿼리 창을 열고, 위의 SQL 문을 실행하여 두 번째 서버에서 동일한 키를 만드세요.

  5. 첫 번째 서버에서 아래의 OPEN SYMMETRIC KEY 문과 SELECT 문을 먼저 실행하여 키를 테스트합니다.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    SELECT encryptbykey(key_guid('key_DataShare'), 'MyData' )  
    GO  
    -- For example, the output might look like this: 0x2152F8DA8A500A9EDC2FAE26D15C302DA70D25563DAE7D5D1102E3056CE9EF95CA3E7289F7F4D0523ED0376B155FE9C3  
    
  6. 두 번째 서버에서 이전 SELECT 문의 결과를 다음 코드의 @blob 값으로 붙여넣고 다음 코드를 실행하여 중복 키가 암호 텍스트를 해독할 수 있는지 확인하세요.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    DECLARE @blob varbinary(8000);  
    SELECT CONVERT(varchar(8000), decryptbykey(@blob));  
    GO  
    
  7. 두 서버에서 대칭 키를 닫습니다.

    CLOSE SYMMETRIC KEY [key_DataShare];  
    GO  
    

SQL Server 2017 CU2의 암호화 변경 내용

SQL Server 2016은 암호화 작업에 SHA1 해시 알고리즘을 사용합니다. SQL Server 2017부터 SHA2가 SHA1 대신 사용됩니다. 즉, SQL Server 2017 설치에서 SQL Server 2016에서 암호화된 항목을 해독하려면 추가 단계가 필요할 수 있습니다. 추가 단계는 다음과 같습니다.

  • SQL Server 2017이 누적 업데이트 2(CU2) 이상으로 업데이트되었는지 확인합니다.
  • CU2를 설치한 후 SQL Server 2017: DBCC TRACEON(4631, -1);에서 추적 플래그 4631을 켭니다.
    • 추적 플래그 4631은 SQL Server 2017의 새로운 기능입니다. SQL Server 2017에서 마스터 키, 인증서 또는 대칭 키를 만들기 전에 추적 플래그 4631을 ON 전역으로 만들어야 합니다. 이렇게 하면 이러한 생성된 항목이 SQL Server 2016 및 이전 버전과 상호 운용할 수 있습니다. SHA2 파생 키를 사용하여 데이터를 다시 암호화하려면 이 추적 플래그를 일시적으로만 켜야 합니다.

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

참고 항목