CREATE CERTIFICATE (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 = 'mm/dd/yyyy' | EXPIRY_DATE = 'mm/dd/yyyy'
引数
- 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
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'
秘密キーの暗号化に使用するパスワードを指定します。このオプションは、証明書をパスワードで暗号化する場合にのみ使用します。この句を省略した場合、秘密キーはデータベースのマスタ キーで暗号化されます。このパスワードは、パスワードの複雑性のポリシーに従う必要があります。詳細については、「パスワード ポリシー」を参照してください。
- SUBJECT = 'certificate_subject_name'
サブジェクトという用語は、X.509 標準で定義されている、証明書のメタデータ内にあるフィールドを指します。サブジェクトは半角 128 文字まで指定できます。128 文字を超えるサブジェクトは、カタログに格納されるときには切り捨てられますが、証明書を含むバイナリ ラージ オブジェクト (BLOB) では、完全なサブジェクト名が保持されます。
- START_DATE ='mm/dd/yyyy'
証明書が有効となる日付を指定します。指定しない場合、START_DATE は現在の日付に設定されます。
- EXPIRY_DATE ='mm/dd/yyyy'
証明書が期限切れとなる日付を指定します。指定しない場合、EXPIRY_DATE は START_DATE の 1 年後の日付に設定されます。
- ACTIVE FOR BEGIN_DIALOG = { ON | OFF }
Service Broker メッセージ交換の発信側で証明書を使用できるようにします。既定値は ON です。
解説
証明書は、X.509 標準に準拠したデータベース レベルのセキュリティ保護可能なリソースであり、X.509 V1 フィールドをサポートします。CREATE CERTIFICATE では、ファイルまたはアセンブリから証明書を読み込むことができます。このステートメントでは、キー ペアを生成して自己署名証明書を作成することもできます。
SQL Server によって生成される秘密キーの長さは 1,024 ビットです。外部ソースからインポートされる秘密キーの最小長は 384 ビットで、最大長は 3,456 ビットです。インポートされる秘密キーの長さは、64 ビットの整数倍であることが必要です。
秘密キーは、certificate_name で指定する公開キーに対応している必要があります。
証明書をコンテナから作成する場合、秘密キーの読み込みは省略可能です。しかし、SQL Server で自己署名証明書が生成されるときには、常に秘密キーが作成されます。既定では、秘密キーはデータベースのマスタ キーを使用して暗号化されます。データベースのマスタ キーが存在せず、パスワードを指定しない場合、ステートメントは失敗します。
ENCRYPTION BY PASSWORD オプションは、秘密キーをデータベース マスタ キーで暗号化しない場合は指定する必要はありません。このオプションは、秘密キーをパスワードで暗号化するときにのみ使用します。パスワードを指定しない場合、証明書の秘密キーは、データベースのマスタ キーを使用して暗号化されます。この句を省略すると、データベースのマスタ キーを開くことができない場合はエラーが発生します。
秘密キーがデータベース マスタ キーを使って暗号化されている場合は、暗号化解除のパスワードを指定する必要はありません。
![]() |
---|
暗号化や署名用の組み込み関数では、証明書の有効期限はチェックされません。これらの関数を使用する場合、ユーザーは、証明書の有効期限をいつチェックするかを自分で決定する必要があります。 |
START_DATE および EXPIRY_DATE 引数では、これらの日付に時間を指定することはできません。ただし、SQL Server の日付および時間関数を使用して、証明書の開始日と終了日に特定の時間を追加することはできます。詳細については、次のトピックを参照してください。
権限
データベースに対する CREATE CERTIFICATE 権限が必要です。
例
A. 自己署名証明書を作成する
次の例では、Shipping04
という証明書を作成します。この証明書の秘密キーは、パスワードを使用して保護されます。
USE AdventureWorks;
CREATE CERTIFICATE Shipping04
ENCRYPTION BY PASSWORD = 'pGFD4bb925DGvbd2439587y'
WITH SUBJECT = 'Sammamish Shipping Records',
EXPIRY_DATE = '10/31/2009';
GO
B. ファイルから証明書を作成する
次の例では、データベースに証明書を作成し、ファイルからキー ペアを読み込みます。
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
C. 署名付き実行可能ファイルから証明書を作成する
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
参照
関連項目
ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL)
EVENTDATA (Transact-SQL)