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

適用対象: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

SQL ServerSQL Server のデータベースに証明書を追加します。Adds a certificate to a database in SQL ServerSQL Server.

この機能は、データ層アプリケーション フレームワーク (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 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.

AUTHORIZATION user_nameAUTHORIZATION user_name
証明書の所有者となるユーザーの名前を指定します。Is the name of the user that owns this certificate.

ASSEMBLY assembly_nameASSEMBLY assembly_name
データベース内に既に読み込まれている署名付きアセンブリを指定します。Specifies a signed assembly that has already been loaded into the database.

[ EXECUTABLE ] FILE ='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.

重要

Azure SQL Database では、ファイルからの証明書の作成や秘密キー ファイルの使用はサポートされません。Azure SQL Database does not support creating a certificate from a file or using private key files.

BINARY =asn_encoded_certificateBINARY =asn_encoded_certificate
バイナリ定数として指定された、ASN でエンコードされた証明書バイト。ASN encoded certificate bytes specified as a binary constant.
適用対象: SQL Server 2012 (11.x)SQL Server 2012 (11.x) 以降。Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later.

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 invalid when the certificate is being created from an assembly. アセンブリから作成された証明書の秘密キーを読み込むには、ALTER CERTIFICATE を使用します。To load the private key of a certificate created from an assembly, use ALTER CERTIFICATE.

FILE ='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.

重要

このオプションは、包含データベースまたは Azure SQL Database では使用できません。This option is not available in a contained database or in Azure SQL Database.

BINARY =private_key_bitsBINARY =private_key_bits
適用対象: SQL Server 2012 (11.x)SQL Server 2012 (11.x) 以降。Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later.

バイナリ定数として指定された秘密キーのビット。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 ='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. password は、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.

SUBJECT ='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. Linux 上の SQL ServerSQL Server の場合、サブジェクトは半角 64 文字以下の長さでなければなりません。The subject should be no more than 64 characters long, and this limit is enforced for SQL ServerSQL Server on Linux. Windows 上の SQL ServerSQL Server の場合は、サブジェクトは半角 128 文字まで設定できます。For SQL ServerSQL Server on Windows, the subject can be up to 128 characters long. 128 文字を超えた場合、サブジェクトはカタログに格納されるときには切り捨てられますが、証明書を含むバイナリ ラージ オブジェクト (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 は START_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 Server Service Broker は、有効期限の日付を確認します。Service Broker checks the expiration date. 証明書を使用する暗号化されたバックアップでは、有効期限も確認され、期限切れの証明書を使用する新しいバックアップの作成は許可されません。ただし、期限切れの証明書を使用する復元は許可されます。Backup with Encryption using certificates also checks the expiration date and will not allow a new backup to be created with an expired certificate, but will allow restores with an expired certificate. ただし、証明書がデータベースの暗号化または Always Encrypted のために使用される場合、有効期限は強制されません。However, expiration is not enforced when the certificate is used for database encryption or Always Encrypted.

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.

RemarksRemarks

証明書は、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, a binary constant, or an 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 によって生成される秘密キーの長さは、SQL Server 2014 (12.x)SQL Server 2014 (12.x) までは 1024 ビット、SQL Server 2016 (13.x)SQL Server 2016 (13.x) 以降は 2048 ビットです。Private keys generated by SQL ServerSQL Server are 1024 bits long through SQL Server 2014 (12.x)SQL Server 2014 (12.x) and are 2048 bits long beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x). 外部ソースからインポートされる秘密キーの最小の長さは 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.

証明書の全体のシリアル番号が格納されているが、sys.certificates カタログ ビューで最初の 16 バイトのみが表示されます。The entire Serial Number of the certificate is stored but only the first 16 bytes appear in the sys.certificates catalog view.

証明書の発行者フィールド全体が格納されているが、カタログ ビューの sys.certificates で最初の 884 バイトのみです。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 を使用して証明書を別のデータベースにコピーする例については、「CERTENCODED (Transact-SQL)」の例 B を参照してください。For an example that uses CERTPRIVATEKEY and CERTENCODED to copy a certificate to another database, see example B in the article CERTENCODED (Transact-SQL).

アクセス許可Permissions

データベースに対する 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

A.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  

B.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   

重要

Azure SQL Database では、ファイルからの証明書の作成はサポートされません。Azure SQL Database does not support creating a certificate from a file.

C.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  

重要

Azure SQL Database では、ファイルからの証明書の作成はサポートされません。Azure SQL Database does not support creating a certificate from a file.

重要

SQL Server 2017 (14.x)SQL Server 2017 (14.x) 以降では、最初にセキュリティを設定しなくても、'CLR strict security' サーバー構成オプションによりアセンブリの読み込みが防止されます。Starting in SQL Server 2017 (14.x)SQL Server 2017 (14.x), the 'CLR strict security' server configuration option prevents loading assemblies without first setting up the security for them. 証明書を読み込み、そこからログインを作成し、UNSAFE ASSEMBLY にそのログインを付与してから、アセンブリを読み込みます。Load the certificate, create a login from it, grant UNSAFE ASSEMBLY to that login, and then load the assembly.

D.D. 自己署名証明書を作成するCreating a self-signed certificate

次の例では、暗号化パスワードを指定しないで、Shipping04 という証明書を作成します。The following example creates a certificate called Shipping04 without specifying an encryption password. この例は、Parallel Data WarehouseParallel Data Warehouse で使用できます。This example can be used with Parallel Data WarehouseParallel 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)
CERT_ID (Transact-SQL)CERT_ID (Transact-SQL)
CERTPROPERTY (Transact-SQL)CERTPROPERTY (Transact-SQL)