CREATE CERTIFICATE(Transact-SQL)

데이터베이스에 인증서를 추가합니다.

항목 링크 아이콘 Transact-SQL 구문 표기 규칙

구문

CREATE CERTIFICATE certificate_name [ AUTHORIZATION user_name ] 
    { FROM <existing_keys> | <generate_new_keys> }
    [ ACTIVE FOR BEGIN_DIALOG =  { ON | OFF } ]
        
<existing_keys> ::= 
    ASSEMBLY assembly_name
    | { 
        [ EXECUTABLE ] FILE = 'path_to_file'
        [ WITH PRIVATE KEY ( <private_key_options> ) ] 
      }
    | { 
        BINARY = asn_encoded_certificate
        [ WITH PRIVATE KEY ( <private_key_options> ) ]
      }
<generate_new_keys> ::= 
    [ ENCRYPTION BY PASSWORD = 'password' ] 
    WITH SUBJECT = 'certificate_subject_name' 
    [ , <date_options> [ ,...n ] ] 

<private_key_options> ::=
      { 
        FILE = 'path_to_private_key'
         [ , DECRYPTION BY PASSWORD = 'password' ]
         [ , ENCRYPTION BY PASSWORD = 'password' ]  
      }
    |
      { 
        BINARY = private_key_bits
         [ , DECRYPTION BY PASSWORD = 'password' ]
         [ , ENCRYPTION BY PASSWORD = 'password' ]  
      }

<date_options> ::=
    START_DATE = 'datetime' | EXPIRY_DATE = 'datetime'

인수

  • certificate_name
    데이터베이스에서 인증서를 식별하는 이름입니다.

  • AUTHORIZATION user_name
    이 인증서를 소유하게 될 사용자의 이름입니다.

  • ASSEMBLY assembly_name
    데이터베이스에 이미 로드된 서명된 어셈블리를 지정합니다.

  • [ EXECUTABLE ] FILE ='path_to_file'
    인증서를 포함하는 DER 인코딩 파일에 대해 파일 이름을 포함한 전체 경로를 지정합니다. EXECUTABLE 옵션을 사용한 경우 파일은 인증서로 서명된 DLL입니다. path_to_file은 로컬 경로 또는 네트워크 위치에 대한 UNC 경로일 수 있습니다. 파일은 SQL Server 서비스 계정의 보안 컨텍스트에서 액세스됩니다. 이 계정에는 필요한 파일 시스템 사용 권한이 있어야 합니다.

  • WITH PRIVATE KEY
    인증서의 개인 키가 SQL Server에 로드되도록 지정합니다. 이 절은 인증서가 파일에서 생성되는 경우에만 유효합니다. 어셈블리의 개인 키를 로드하려면 ALTER CERTIFICATE를 사용합니다.

  • FILE ='path_to_private_key'
    개인 키에 대해 파일 이름을 포함하여 전체 경로를 지정합니다. path_to_private_key은 로컬 경로 또는 네트워크 위치에 대한 UNC 경로일 수 있습니다. 파일은 SQL Server 서비스 계정의 보안 컨텍스트에서 액세스됩니다. 이 계정에는 필요한 파일 시스템 사용 권한이 있어야 합니다.

    [!참고]

    포함된 데이터베이스에서는 이 옵션을 사용할 수 없습니다.

  • asn_encoded_certificate
    ASN으로 인코딩된 인증서 비트로, 이진 상수로 지정됩니다.

  • BINARY =private_key_bits
    이진 상수로 지정되는 개인 키 비트입니다. 이러한 비트는 암호화된 형식일 수 있습니다. 암호화된 경우 사용자는 해독 암호를 입력해야 합니다. 이 암호에 대해서는 암호 정책 확인이 수행되지 않습니다. 개인 키 비트는 PVK 파일 형식이어야 합니다.

  • DECRYPTION BY PASSWORD ='key_password'
    파일에서 검색한 개인 키의 암호를 해독하는 데 필요한 암호를 지정합니다. 개인 키가 Null 암호로 보호되는 경우 이 절은 선택 사항입니다. 암호 보호 없이 개인 키를 파일에 저장하는 것은 권장되지 않습니다. 암호가 필요하지만 지정된 암호가 없으면 문이 실패합니다.

  • ENCRYPTION BY PASSWORD ='password'
    개인 키를 암호화하는 데 사용되는 암호를 지정합니다. 암호로 인증서를 암호화하려는 경우에만 이 옵션을 사용합니다. 이 절을 생략하면 개인 키가 데이터베이스 마스터 키로 암호화됩니다. password는 SQL Server 인스턴스를 실행하는 컴퓨터의 Windows 암호 정책 요구 사항을 따라야 합니다. 자세한 내용은 암호 정책를 참조하세요.

  • SUBJECT ='certificate_subject_name'
    제목이란 단어는 X.509 표준에 정의된 것과 같이 인증서의 메타데이터에 있는 필드를 나타냅니다. 제목은 최대 128자까지 지정할 수 있습니다. 128자를 초과하는 제목은 카탈로그에 저장될 때 잘리지만 인증서가 포함된 BLOB(Binary Large Object)에는 전체 제목 이름이 포함됩니다.

  • START_DATE ='datetime'
    인증서가 유효하게 되는 날짜입니다. 지정하지 않으면 START_DATE가 현재 날짜와 같게 설정됩니다. START_DATE는 UTC 시간이며 날짜 및 시간으로 변환이 가능한 모든 형식으로 지정할 수 있습니다.

  • EXPIRY_DATE ='datetime'
    인증서가 만료되는 날짜입니다. 지정하지 않으면 EXPIRY_DATE가 START_DATE의 일년 후 날짜로 설정됩니다. EXPIRY_DATE는 UTC 시간이며 날짜 및 시간으로 변환이 가능한 모든 형식으로 지정할 수 있습니다. SQL Server Service Broker는 만료 날짜를 검사하지만 인증서가 암호화에 사용되는 경우에는 만료되지 않습니다.

  • ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
    Service Broker 대화 기능의 시작자가 인증서를 사용할 수 있게 합니다. 기본값은 ON입니다.

주의

인증서는 X.509 표준을 따르고 X.509 V1 필드를 지원하는 데이터베이스 수준의 보안 개체입니다. CREATE CERTIFICATE는 파일이나 어셈블리로부터 인증서를 로드할 수 있습니다. 이 문은 또한 키 쌍을 생성하고 자체 서명된 인증서를 만들 수 있습니다.

SQL Server에서 생성되는 개인 키의 길이는 1024비트입니다. 외부 원본으로부터 가져온 개인 키의 최소 길이는 384비트이고 최대 길이는 4,096비트입니다. 가져온 개인 키의 길이는 64비트의 정수 배수여야 합니다. TDE에 사용되는 인증서의 개인 키 크기는3456비트로 제한됩니다.

개인 키는 certificate_name으로 지정한 공개 키와 일치해야 합니다.

컨테이너로부터 인증서를 만들 때 개인 키 로드는 선택 사항입니다. 하지만 SQL Server가 자체 서명된 인증서를 생성할 때 항상 개인 키가 생성됩니다. 기본적으로 개인 키는 데이터베이스 마스터 키를 사용하여 암호화됩니다. 데이터베이스 마스터 키가 없고 지정된 암호가 없으면 문이 실패합니다.

개인 키가 데이터베이스 마스터 키로 암호화되는 경우 ENCRYPTION BY PASSWORD 옵션이 필요하지 않습니다. 이 옵션은 개인 키가 암호로 암호화되는 경우에만 사용합니다. 지정된 암호가 없으면 인증서의 개인 키가 데이터베이스 마스터 키를 사용하여 암호화됩니다. 이 절을 생략하면 데이터베이스 마스터 키를 열 수 없는 경우 오류가 발생합니다.

데이터베이스 마스터 키를 사용하여 개인 키를 암호화한 경우에는 해독 암호를 지정할 필요가 없습니다.

[!참고]

암호화 및 서명에 대한 기본 제공 함수는 인증서의 만료 날짜를 검사하지 않습니다. 이러한 함수의 사용자는 인증서 만료에 대한 검사 시기를 결정해야 합니다.

인증서의 이진 설명은 CERTENCODED(Transact-SQL)CERTPRIVATEKEY(Transact-SQL) 함수를 사용하여 만들 수 있습니다. CERTPRIVATEKEY 및 CERTENCODED를 사용하여 인증서를 다른 데이터베이스로 복사하는 예는 CERTENCODED(Transact-SQL) 항목의 예 2를 참조하십시오.

사용 권한

데이터베이스에 대한 CREATE CERTIFICATE 권한이 필요합니다. Windows 로그인, SQL Server 로그인 및 응용 프로그램 역할만 인증서를 소유할 수 있습니다. 그룹 및 역할은 인증서를 소유할 수 없습니다.

1.자체 서명된 인증서 만들기

다음 예에서는 Shipping04라는 인증서를 만듭니다. 이 인증서의 개인 키는 암호를 사용하여 보호됩니다.

USE AdventureWorks2012;
CREATE CERTIFICATE Shipping04 
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
   WITH SUBJECT = 'Sammamish Shipping Records', 
   EXPIRY_DATE = '20121031';
GO

2.파일로부터 인증서 만들기

다음 예에서는 데이터베이스에서 인증서를 만들고 파일로부터 키 쌍을 로드합니다.

USE AdventureWorks2012;
CREATE CERTIFICATE Shipping11 
    FROM FILE = 'c:\Shipping\Certs\Shipping11.cer' 
    WITH PRIVATE KEY (FILE = 'c:\Shipping\Certs\Shipping11.pvk', 
    DECRYPTION BY PASSWORD = 'sldkflk34et6gs%53#v00');
GO 

3.서명된 실행 파일로부터 인증서 만들기

USE AdventureWorks2012;
CREATE CERTIFICATE Shipping19 
    FROM EXECUTABLE FILE = 'c:\Shipping\Certs\Shipping19.dll';
GO

또는 dll 파일로부터 어셈블리를 만든 다음 어셈블리로부터 인증서를 만들 수 있습니다.

USE AdventureWorks2012;
CREATE ASSEMBLY Shipping19 
    FROM ' c:\Shipping\Certs\Shipping19.dll' 
    WITH PERMISSION_SET = SAFE;
GO
CREATE CERTIFICATE Shipping19 FROM ASSEMBLY Shipping19;
GO

참고 항목

참조

ALTER CERTIFICATE(Transact-SQL)

DROP CERTIFICATE(Transact-SQL)

BACKUP CERTIFICATE(Transact-SQL)

EVENTDATA(Transact-SQL)

CERTENCODED(Transact-SQL)

CERTPRIVATEKEY(Transact-SQL)

개념

암호화 계층