TechNet
내보내기(0) 인쇄
모두 확장

ENCRYPTBYKEY(Transact-SQL)

 

**이 항목은 다음에 적용됩니다.:** ![](../Image/Applies%20to/yes.png)SQL Server\(2008부터 시작\) ![](../Image/Applies%20to/yes.png)Azure SQL 데이터베이스 ![](../Image/Applies%20to/no.png)Azure SQL 데이터 웨어하우스 ![](../Image/Applies%20to/no.png)병렬 데이터 웨어하우스

대칭 키를 사용하여 데이터를 암호화합니다.

적용 대상: SQL Server(SQL Server 2008 - 현재 버전).

Topic link icon Transact-SQL 구문 표기 규칙

  
EncryptByKey ( key_GUID , { 'cleartext' | @cleartext }  
    [, { add_authenticator | @add_authenticator }  
     , { authenticator | @authenticator } ] )  

key_GUID
cleartext 암호화에 사용할 키의 GUID입니다. uniqueidentifier.

'cleartext'
키로 암호화할 데이터입니다.

@cleartext
키로 암호화될 데이터가 들어 있는 nvarchar, char, varchar, binary, varbinary 또는 nchar 유형의 변수입니다.

add_authenticator
인증자가 cleartext와 함께 암호화될지 여부를 나타냅니다. 인증자를 사용하는 경우 1이어야 합니다. int.

@add_authenticator
인증자가 cleartext와 함께 암호화될지 여부를 나타냅니다. 인증자를 사용하는 경우 1이어야 합니다. int.

authenticator
인증자가 파생될 데이터입니다. sysname.

@authenticator
인증자가 파생될 데이터를 포함하는 변수입니다.

최대 크기가 8,000바이트인 varbinary

키가 열리지 않거나, 존재하지 않거나, 더 이상 사용되지 않는 RC4 키이며 데이터베이스 호환성 수준이 110 이상이 아닐 경우 Null을 반환합니다.

EncryptByKey는 대칭 키를 사용합니다. 이 키는 열려 있어야 합니다. 대칭 키가 현재 세션에서 이미 열려 있으면 쿼리 컨텍스트에서 다시 열지 않아도 됩니다.

인증자는 암호화된 필드의 정수 값 대체를 막는 데 유용합니다. 예를 들어 급여 데이터로 이루어진 다음 테이블을 살펴봅니다.

Employee_IDStandard_TitleBase_Pay
345Copy Room AssistantFskj%7^edhn00
697Chief Financial OfficerM0x8900f56543
694Data Entry SupervisorCvc97824%^34f

악의적인 사용자는 암호화 텍스트 저장 컨텍스트에서 암호화를 해제하지 않고도 상당한 정보를 추론할 수 있습니다. Chief Financial Officer는 Copy Room Assistant보다 더 많은 급여를 받으므로 M0x8900f56543으로 암호화된 값이 Fskj%7^edhn00으로 암호화된 값보다 커야 합니다. 이 경우 테이블에 대해 ALTER 권한을 갖는 모든 사용자는 자신의 Base_Pay 필드 데이터를 Chief Financial Officer의 Base_Pay 필드에 저장된 데이터 복사본으로 바꾸어 Copy Room Assistant의 급여를 올릴 수 있습니다. 이러한 전체 값 대체 공격은 암호화를 무시합니다.

암호화하기 전에 컨텍스트 정보를 일반 텍스트에 추가하여 전체 값 대체 공격을 방지할 수 있습니다. 이러한 컨텍스트 정보는 일반 텍스트 데이터가 이동되지 않았는지 확인하는 데 사용됩니다.

데이터 암호화 시 인증자 매개 변수가 지정된 경우 DecryptByKey를 사용하여 데이터의 암호를 해독하려면 같은 인증자가 필요합니다. 암호화 시 인증자의 해시는 일반 텍스트와 함께 암호화됩니다. 암호 해독 시 같은 인증자가 DecryptByKey에 전달되어야 합니다. 두 값이 일치하지 않으면 해독에 실패합니다. 이것은 암호화 이후에 해당 값이 이동되었음을 의미합니다. 변화지 않는 고유한 값이 포함된 열을 인증자로 사용하는 것이 좋습니다. 인증자 값이 변경되면 데이터에 액세스하지 못할 수 있습니다.

대칭 암호화 및 암호 해독은 비교적 속도가 빠르며 대량의 데이터 작업 시 적합합니다.

System_CAPS_ICON_important.jpg 중요


SQL Server 암호화 함수를 ANSI_PADDING OFF 설정과 함께 사용하면 암시적 변환으로 인해 데이터가 손실될 수 있습니다. ANSI_PADDING에 대한 자세한 내용은 SET ANSI_PADDING(Transact-SQL)을 참조하십시오.

다음 예에 설명된 기능은 방법: 데이터 열 암호화 항목에서 만드는 키와 인증서를 이용합니다.

1.대칭 키로 문자열 암호화

다음 예에서는 Employee 테이블에 열을 추가한 다음 NationalIDNumber 열에 저장되는 주민 등록 번호의 값을 암호화합니다.

USE AdventureWorks2012;  
GO  
  
-- Create a column in which to store the encrypted data.  
ALTER TABLE HumanResources.Employee  
    ADD EncryptedNationalIDNumber varbinary(128);   
GO  
  
-- Open the symmetric key with which to encrypt the data.  
OPEN SYMMETRIC KEY SSN_Key_01  
   DECRYPTION BY CERTIFICATE HumanResources037;  
  
-- Encrypt the value in column NationalIDNumber with symmetric key  
-- SSN_Key_01. Save the result in column EncryptedNationalIDNumber.  
UPDATE HumanResources.Employee  
SET EncryptedNationalIDNumber  
    = EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);  
GO  

2.인증 값과 함께 레코드 암호화

USE AdventureWorks2012;  
  
-- Create a column in which to store the encrypted data.  
ALTER TABLE Sales.CreditCard.   
    ADD CardNumber_Encrypted varbinary(128);   
GO  
  
-- Open the symmetric key with which to encrypt the data.  
OPEN SYMMETRIC KEY CreditCards_Key11  
    DECRYPTION BY CERTIFICATE Sales09;  
  
-- Encrypt the value in column CardNumber with symmetric   
-- key CreditCards_Key11.  
-- Save the result in column CardNumber_Encrypted.    
UPDATE Sales.CreditCard  
SET CardNumber_Encrypted = EncryptByKey(Key_GUID('CreditCards_Key11'),   
    CardNumber, 1, CONVERT( varbinary, CreditCardID) );  
GO  

DECRYPTBYKEY(Transact-SQL)
CREATE SYMMETRIC KEY(Transact-SQL)
ALTER SYMMETRIC KEY(Transact-SQL)
DROP SYMMETRIC KEY(Transact-SQL)
암호화 계층
HASHBYTES(Transact-SQL)

커뮤니티 추가 항목

표시:
© 2016 Microsoft