CREATE CERTIFICATE (Transact-SQL)
SQL Server のデータベースに証明書を追加します。
適用対象: SQL Server (SQL Server 2008 から現在のバージョンまで) |
構文
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
適用対象: SQL Server 2012 から SQL Server 2014。
バイナリ定数として指定された秘密キーのビット。 これらのビットは暗号化された形式でもかまいません。 暗号化されている場合は、ユーザーは暗号化解除パスワードを指定する必要があります。 パスワード ポリシーのチェックは、このパスワードに対しては実行されません。 秘密キーのビットは PVK ファイル形式にする必要があります。
DECRYPTION BY PASSWORD ='key_password'
ファイルから取得する秘密キーの暗号化解除に必要なパスワードを指定します。 秘密キーが NULL パスワードで保護されている場合、この句は省略可能です。 パスワード保護なしで秘密キーをファイルに保存することは推奨されません。 パスワードが必要な場合にパスワードを指定しない場合、ステートメントは失敗します。ENCRYPTION BY PASSWORD ='password'
秘密キーの暗号化に使用するパスワードを指定します。 このオプションは、証明書をパスワードで暗号化する場合にのみ使用します。 この句を省略した場合、秘密キーはデータベースのマスター キーで暗号化されます。 password は、Windows のパスワード ポリシーが SQL Server のインスタンスを実行するコンピューターに要求する条件を満足する必要があります。 詳細については、「パスワード ポリシー」を参照してください。SUBJECT ='certificate_subject_name'
サブジェクトという用語は、X.509 標準で定義されている、証明書のメタデータ内にあるフィールドを指します。 サブジェクトは半角 128 文字まで設定できます。 128 文字を超えた場合、サブジェクトはカタログに格納されるときには切り捨てられますが、証明書を含むバイナリ ラージ オブジェクト (BLOB) では、完全なサブジェクト名が保持されます。START_DATE ='datetime'
証明書が有効となる日付を指定します。 指定しない場合、START_DATE は現在の日付に設定されます。 START_DATE は UTC 時刻で、日時に変換可能な任意の形式で指定できます。EXPIRY_DATE ='datetime'
証明書が期限切れとなる日付を指定します。 指定しない場合、EXPIRY_DATE は START_DATE の 1 年後の日付に設定されます。 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 によって生成される秘密キーの長さは 1,024 ビットです。 外部ソースからインポートされる秘密キーの最小の長さは 384 ビットで、最大の長さは 4,096 ビットです。 インポートされる秘密キーの長さは、64 ビットの整数倍であることが必要です。
秘密キーは、certificate_name で指定する公開キーに対応している必要があります。
証明書をコンテナーから作成する場合、秘密キーの読み込みは省略可能です。 しかし、SQL Server で自己署名証明書が生成されるときには、常に秘密キーが作成されます。 既定では、秘密キーはデータベースのマスター キーを使用して暗号化されます。 データベースのマスター キーが存在せず、パスワードを指定しない場合、ステートメントは失敗します。
ENCRYPTION BY PASSWORD オプションは、秘密キーをデータベース マスター キーで暗号化しない場合は指定する必要はありません。 このオプションは、秘密キーをパスワードで暗号化するときにのみ使用します。 パスワードを指定しない場合、証明書の秘密キーは、データベースのマスター キーを使用して暗号化されます。 この句を省略すると、データベースのマスター キーを開くことができない場合はエラーが発生します。
秘密キーがデータベース マスター キーを使って暗号化されている場合は、暗号化解除のパスワードを指定する必要はありません。
注意
暗号化や署名用の組み込み関数では、証明書の有効期限はチェックされません。これらの関数を使用する場合、ユーザーは、証明書の有効期限をいつチェックするかを自分で決定する必要があります。
証明書のバイナリ記述は、CERTENCODED (Transact-SQL) 関数と CERTPRIVATEKEY (Transact-SQL) 関数を使用して作成できます。 CERTPRIVATEKEY と CERTENCODED を使用して証明書を別のデータベースにコピーする例については、「CERTENCODED (Transact-SQL)」の例 B を参照してください。
権限
データベースに対する CREATE CERTIFICATE 権限が必要です。 証明書を所有できるのは、Windows ログイン、SQL Server ログイン、およびアプリケーション ロールだけです。 グループとロールは証明書を所有できません。
使用例
A. 自己署名証明書を作成する
次の例では、Shipping04 という証明書を作成します。 この証明書の秘密キーは、パスワードを使用して保護されます。
USE AdventureWorks2012;
CREATE CERTIFICATE Shipping04
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Sammamish Shipping Records',
EXPIRY_DATE = '20121031';
GO
B. ファイルから証明書を作成する
次の例では、データベースに証明書を作成し、ファイルからキー ペアを読み込みます。
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
C. 署名付き実行可能ファイルから証明書を作成する
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)