CREATE CERTIFICATE(Transact-SQL)CREATE CERTIFICATE (Transact-SQL)

이 항목은 다음에 적용됩니다. 예SQL Server(2008부터)예Azure SQL Database예Azure SQL Data Warehouse 예병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

SQL ServerSQL Server에서 데이터베이스에 인증서를 추가합니다.Adds a certificate to a database in SQL ServerSQL Server.

이 기능은 Data Tier Application Framework(DACFx)를 사용하는 데이터베이스 내보내기와 호환되지 않습니다.This feature is incompatible with database export using Data Tier Application Framework (DACFx). 내보내기 전에 모든 인증서를 삭제해야 합니다.You must drop all certificates before exporting.

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

-- Syntax for SQL Server and Azure SQL Database  

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'  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

CREATE CERTIFICATE certificate_name   
    { <generate_new_keys> | FROM <existing_keys> }  
    [ ; ]  

<generate_new_keys> ::=   
    WITH SUBJECT ='certificate_subject_name'   
    [ , <date_options> [ ,...n ] ]   

<existing_keys> ::=   
    {   
      FILE ='path_to_file'  
      WITH PRIVATE KEY   
         (   
           FILE ='path_to_private_key'  
           , DECRYPTION BY PASSWORD ='password'   
         )  
    }  

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

인수Arguments

certificate_namecertificate_name
데이터베이스의 인증서에 대 한 이름이입니다.Is the name for the certificate in the database.

권한 부여 user_nameAUTHORIZATION user_name
이 인증서를 소유 하는 사용자의 이름이입니다.Is the name of the user that owns this certificate.

어셈블리 assembly_nameASSEMBLY assembly_name
데이터베이스에 이미 로드된 서명된 어셈블리를 지정합니다.Specifies a signed assembly that has already been loaded into the database.

[실행 파일] 파일 ='path_to_file'[ EXECUTABLE ] FILE ='path_to_file'
인증서를 포함하는 DER 인코딩 파일에 대해 파일 이름을 포함한 전체 경로를 지정합니다.Specifies the complete path, including file name, to a DER-encoded file that contains the certificate. EXECUTABLE 옵션을 사용한 경우 파일은 인증서로 서명된 DLL입니다.If the EXECUTABLE option is used, the file is a DLL that has been signed by the certificate. path_to_file 로컬 경로 또는 UNC 경로를 네트워크 위치 일 수 있습니다.path_to_file can be a local path or a UNC path to a network location. 이 파일은의 보안 컨텍스트에서 액세스는 SQL ServerSQL Server 서비스 계정입니다.The file is accessed in the security context of the SQL ServerSQL Server service account. 이 계정에는 필요한 파일 시스템 사용 권한이 있어야 합니다.This account must have the required file-system permissions.

WITH PRIVATE KEYWITH PRIVATE KEY
인증서의 개인 키가 SQL ServerSQL Server에 로드되도록 지정합니다.Specifies that the private key of the certificate is loaded into SQL ServerSQL Server. 이 절은 인증서가 파일에서 생성되는 경우에만 유효합니다.This clause is only valid when the certificate is being created from a file. 어셈블리의 개인 키를 로드 하려면 사용 하 여 ALTER CERTIFICATE합니다.To load the private key of an assembly, use ALTER CERTIFICATE.

파일 ='path_to_private_key'FILE ='path_to_private_key'
개인 키에 대해 파일 이름을 포함하여 전체 경로를 지정합니다.Specifies the complete path, including file name, to the private key. path_to_private_key 로컬 경로 또는 UNC 경로를 네트워크 위치 일 수 있습니다.path_to_private_key can be a local path or a UNC path to a network location. 이 파일은의 보안 컨텍스트에서 액세스는 SQL ServerSQL Server 서비스 계정입니다.The file is accessed in the security context of the SQL ServerSQL Server service account. 이 계정에는 필요한 파일 시스템 사용 권한이 있어야 합니다.This account must have the necessary file-system permissions.

참고

포함된 데이터베이스에서는 이 옵션을 사용할 수 없습니다.This option is not available in a contained database.

asn_encoded_certificateasn_encoded_certificate
ASN으로 인코딩된 인증서 비트로, 이진 상수로 지정됩니다.ASN encoded certificate bits specified as a binary constant.

이진 =private_key_bitsBINARY =private_key_bits
적용 대상: SQL Server 2012SQL Server 2012 부터 SQL Server 2017SQL Server 2017까지Applies to: SQL Server 2012SQL Server 2012 through SQL Server 2017SQL Server 2017.

이진 상수로 지정되는 개인 키 비트입니다.Private key bits specified as binary constant. 이러한 비트는 암호화된 형식일 수 있습니다.These bits can be in encrypted form. 암호화된 경우 사용자는 해독 암호를 입력해야 합니다.If encrypted, the user must provide a decryption password. 이 암호에 대해서는 암호 정책 확인이 수행되지 않습니다.Password policy checks are not performed on this password. 개인 키 비트는 PVK 파일 형식이어야 합니다.The private key bits should be in a PVK file format.

DECRYPTION BY PASSWORD ='key_password'DECRYPTION BY PASSWORD ='key_password'
파일에서 검색한 개인 키의 암호를 해독하는 데 필요한 암호를 지정합니다.Specifies the password required to decrypt a private key that is retrieved from a file. 개인 키가 Null 암호로 보호되는 경우 이 절은 선택 사항입니다.This clause is optional if the private key is protected by a null password. 암호 보호 없이 개인 키를 파일에 저장하는 것은 권장되지 않습니다.Saving a private key to a file without password protection is not recommended. 암호가 필요 하 고 지정 된 암호가 문이 실패 합니다.If a password is required but no password is specified, the statement fails.

ENCRYPTION BY PASSWORD ='암호'ENCRYPTION BY PASSWORD ='password'
개인 키를 암호화 하는 데 사용 되는 암호를 지정 합니다.Specifies the password used to encrypt the private key. 암호로 인증서를 암호화하려는 경우에만 이 옵션을 사용합니다.Use this option only if you want to encrypt the certificate with a password. 이 절을 생략 하면 개인 키는 데이터베이스 마스터 키를 사용 하 여 암호화 됩니다.If this clause is omitted, the private key is encrypted using the database master key. 암호 의 인스턴스를 실행 하는 컴퓨터의 Windows 암호 정책 요구 사항을 충족 해야 SQL ServerSQL Server합니다.password must meet the Windows password policy requirements of the computer that is running the instance of SQL ServerSQL Server. 자세한 내용은 Password Policy을 참조하세요.For more information, see Password Policy.

제목 ='certificate_subject_name'SUBJECT ='certificate_subject_name'
용어 주체 는 X.509 표준에 정의 된 대로 인증서의 메타 데이터에서 필드를 참조 합니다.The term subject refers to a field in the metadata of the certificate as defined in the X.509 standard. 제목은 64자를 초과 할 수 없습니다. 사용 되지 않으며이 한도 대 한 적용 SQL ServerSQL Server linux.The subject should be no more than 64 characters long, and this limit is enforced for SQL ServerSQL Server on Linux. 에 대 한 SQL ServerSQL Server windows에서 주체에는 최대 128 자까지 사용할 수 있습니다.For SQL ServerSQL Server on Windows, the subject can be up to 128 characters long. 128 자를 초과 하는 제목은 카탈로그에 저장 된 하지만 인증서가 포함 된 binary large object (BLOB)에 전체 제목 이름이 유지 될 때 잘립니다.Subjects that exceed 128 characters are truncated when they are stored in the catalog, but the binary large object (BLOB) that contains the certificate retains the full subject name.

START_DATE ='datetime'START_DATE ='datetime'
인증서가 유효하게 되는 날짜입니다.Is the date on which the certificate becomes valid. 지정 하지 않으면 START_DATE는 현재 날짜로 설정 되었습니다.If not specified, START_DATE is set equal to the current date. START_DATE는 UTC 시간이며 날짜 및 시간으로 변환이 가능한 모든 형식으로 지정할 수 있습니다.START_DATE is in UTC time and can be specified in any format that can be converted to a date and time.

EXPIRY_DATE ='datetime'EXPIRY_DATE ='datetime'
인증서가 만료되는 날짜입니다.Is the date on which the certificate expires. 지정 하지 않으면 EXPIRY_DATE 날짜 전이나 후 1 년에 설정 됩니다.If not specified, EXPIRY_DATE is set to a date one year after START_DATE. EXPIRY_DATE는 UTC 시간이며 날짜 및 시간으로 변환이 가능한 모든 형식으로 지정할 수 있습니다.EXPIRY_DATE is in UTC time and can be specified in any format that can be converted to a date and time. SQL ServerSQL ServerService Broker는 만료 날짜를 확인합니다. Service Broker checks the expiration date. 그러나 만료 인증서 암호화에 사용 되는 경우에 적용 되지 않습니다.However, expiration is not enforced when the certificate is used for encryption.

ACTIVE FOR BEGIN_DIALOG = { ON | OFF}ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
Service BrokerService Broker 대화 기능의 시작자가 인증서를 사용할 수 있게 합니다.Makes the certificate available to the initiator of a Service BrokerService Broker dialog conversation. 기본값은 ON입니다.The default value is ON.

주의Remarks

인증서는 X.509 표준을 따르고 X.509 V1 필드를 지원하는 데이터베이스 수준의 보안 개체입니다.A certificate is a database-level securable that follows the X.509 standard and supports X.509 V1 fields. CREATE CERTIFICATE는 파일이나 어셈블리로부터 인증서를 로드할 수 있습니다.CREATE CERTIFICATE can load a certificate from a file or assembly. 이 문은 또한 키 쌍을 생성하고 자체 서명된 인증서를 만들 수 있습니다.This statement can also generate a key pair and create a self-signed certificate.

개인 키는 해야 <= 2500 바이트 암호화 된 형태로 표시 합니다.The Private Key must be <= 2500 bytes in encrypted format. 개인 키에 의해 생성 된 SQL ServerSQL Server 는 1024 비트 통해 긴 SQL Server 2014SQL Server 2014 2048 비트의 길이은 시작 되 고 SQL Server 2016SQL Server 2016합니다.Private keys generated by SQL ServerSQL Server are 1024 bits long through SQL Server 2014SQL Server 2014 and are 2048 bits long beginning with SQL Server 2016SQL Server 2016. 외부 원본으로부터 가져온 개인 키의 최소 길이는 384비트이고 최대 길이는 4,096비트입니다.Private keys imported from an external source have a minimum length of 384 bits and a maximum length of 4,096 bits. 가져온 개인 키의 길이는 64비트의 정수 배수여야 합니다.The length of an imported private key must be an integer multiple of 64 bits. TDE에 사용되는 인증서의 개인 키 크기는 3456비트로 제한됩니다.Certificates used for TDE are limited to a private key size of 3456 bits.

인증서의 일련 번호 전체 저장 되지만 첫 16 바이트만 sys.certificates 카탈로그 뷰에 나타납니다.The entire Serial Number of the certificate is stored but only the first 16 bytes appear in the sys.certificates catalog view.

인증서의 발급자 필드 전체 저장 되지만 첫 번째 884 바이트는 sys.certificates 카탈로그 뷰.The entire Issuer field of the certificate is stored but only the first 884 bytes in the sys.certificates catalog view.

개인 키로 지정 된 공개 키와 일치 해야 certificate_name합니다.The private key must correspond to the public key specified by certificate_name.

컨테이너로부터 인증서를 만들 때 개인 키 로드는 선택 사항입니다.When you create a certificate from a container, loading the private key is optional. 하지만 SQL ServerSQL Server가 자체 서명된 인증서를 생성할 때 항상 개인 키가 생성됩니다.But when SQL ServerSQL Server generates a self-signed certificate, the private key is always created. 기본적으로 개인 키는 데이터베이스 마스터 키를 사용하여 암호화됩니다.By default, the private key is encrypted using the database master key. 데이터베이스 마스터 키가 없는 경우 지정 된 암호가 문이 실패 합니다.If the database master key does not exist and no password is specified, the statement fails.

개인 키가 데이터베이스 마스터 키로 암호화 된 경우에 ENCRYPTION BY PASSWORD 옵션이 필요 하지 않습니다.The ENCRYPTION BY PASSWORD option is not required when the private key is encrypted with the database master key. 개인 키가 암호로 암호화 하는 경우에이 옵션을 사용 합니다.Use this option only when the private key is encrypted with a password. 지정된 암호가 없으면 인증서의 개인 키가 데이터베이스 마스터 키를 사용하여 암호화됩니다.If no password is specified, the private key of the certificate will be encrypted using the database master key. 데이터베이스의 마스터 키를 열 수 없는 경우이 절을 생략 하면 오류가 발생 합니다.If the master key of the database cannot be opened, omitting this clause causes an error.

데이터베이스 마스터 키를 사용하여 개인 키를 암호화한 경우에는 해독 암호를 지정할 필요가 없습니다.You do not have to specify a decryption password when the private key is encrypted with the database master key.

참고

암호화 및 서명에 대한 기본 제공 함수는 인증서의 만료 날짜를 검사하지 않습니다.Built-in functions for encryption and signing do not check the expiration dates of certificates. 이러한 함수의 사용자는 인증서 만료에 대한 검사 시기를 결정해야 합니다.Users of these functions must decide when to check certificate expiration.

인증서에 대 한 이진 설명을 사용 하 여 만들 수 있습니다는 CERTENCODED ( Transact SQL ) CERTPRIVATEKEY ( Transact SQL ) 함수입니다.A binary description of a certificate can be created by using the CERTENCODED (Transact-SQL) and CERTPRIVATEKEY (Transact-SQL) functions. 사용 하는 예제에 대 한 CERTPRIVATEKEYCERTENCODED 인증서를 다른 데이터베이스로 복사할 항목의 예제 B를 참조 하십시오. CERTENCODED ( Transact SQL ) .For an example that uses CERTPRIVATEKEY and CERTENCODED to copy a certificate to another database, see example B in the topic CERTENCODED (Transact-SQL).

PermissionsPermissions

데이터베이스에 대한 CREATE CERTIFICATE 권한이 필요합니다.Requires CREATE CERTIFICATE permission on the database. Windows 로그인, SQL ServerSQL Server 로그인 및 응용 프로그램 역할만 인증서를 소유할 수 있습니다.Only Windows logins, SQL ServerSQL Server logins, and application roles can own certificates. 그룹 및 역할은 인증서를 소유할 수 없습니다.Groups and roles cannot own certificates.

Examples

1.A. 자체 서명된 인증서 만들기Creating a self-signed certificate

다음 예에서는 Shipping04라는 인증서를 만듭니다.The following example creates a certificate called Shipping04. 이 인증서의 개인 키는 암호를 사용하여 보호됩니다.The private key of this certificate is protected using a password.

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

2.B. 파일로부터 인증서 만들기Creating a certificate from a file

다음 예에서는 데이터베이스에서 인증서를 만들고 파일로부터 키 쌍을 로드합니다.The following example creates a certificate in the database, loading the key pair from files.

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.C. 서명된 실행 파일로부터 인증서 만들기Creating a certificate from a signed executable file

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

또는 dll 파일로부터 어셈블리를 만든 다음 어셈블리로부터 인증서를 만들 수 있습니다.Alternatively, you can create an assembly from the dll file, and then create a certificate from the assembly.

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

4.D. 자체 서명된 인증서 만들기Creating a self-signed certificate

다음 예에서는 라는 인증서를 만듭니다. Shipping04 는 암호화 된 암호를 지정 하지 않고 있습니다.The following example creates a certificate called Shipping04 without specifying an encryption password. 이 예에서는 사용할 수 있습니다 Azure SQL 데이터 웨어하우스Azure SQL Data Warehouse병렬 데이터 웨어하우스Parallel Data Warehouse합니다.This example can be used with Azure SQL 데이터 웨어하우스Azure SQL Data Warehouse and 병렬 데이터 웨어하우스Parallel Data Warehouse.

CREATE CERTIFICATE Shipping04   
   WITH SUBJECT = 'Sammamish Shipping Records';  
GO  

관련 항목:See Also

ALTER CERTIFICATE ( Transact SQL ) ALTER CERTIFICATE (Transact-SQL)
DROP certificate( Transact SQL ) DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE(Transact-SQL) BACKUP CERTIFICATE (Transact-SQL)
암호화 계층 Encryption Hierarchy
EVENTDATA(Transact-SQL) EVENTDATA (Transact-SQL)
CERTENCODED ( Transact SQL ) CERTENCODED (Transact-SQL)
CERTPRIVATEKEY ( Transact SQL )CERTPRIVATEKEY (Transact-SQL)