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> ) ] 
      }
        
<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' ]  

<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 서비스 계정의 보안 컨텍스트에서 액세스됩니다. 이 계정에는 필요한 파일 시스템 사용 권한이 있어야 합니다.

  • 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비트이고 최대 길이는 3,456비트입니다. 가져온 개인 키의 길이는 64비트의 정수 배수여야 합니다.

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

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

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

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

[!참고]

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

사용 권한

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

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

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

USE AdventureWorks;
CREATE CERTIFICATE Shipping04 
   ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
   WITH SUBJECT = 'Sammamish Shipping Records', 
   EXPIRY_DATE = '10/31/2009';
GO

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

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

USE AdventureWorks;
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 AdventureWorks;
CREATE CERTIFICATE Shipping19 
    FROM EXECUTABLE FILE = 'c:\Shipping\Certs\Shipping19.dll';
GO

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

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