CREATE SYMMETRIC KEY (Transact-SQL)

対称キーを生成し、プロパティを指定します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

CREATE SYMMETRIC KEY key_name [ AUTHORIZATION owner_name ]
    [ FROM PROVIDER Provider_Name ]
    WITH <key_options> [ , ... n ]
        |
    ENCRYPTION BY <encrypting_mechanism> [ , ... n ]
<key_options> ::=
    KEY_SOURCE = 'pass_phrase'
    |
    ALGORITHM = <algorithm>
    |
    IDENTITY_VALUE = 'identity_phrase'
    |
        PROVIDER_KEY_NAME = 'key_name_in_provider' 
    |
    CREATION_DISPOSITION = {CREATE_NEW | OPEN_EXISTING }
<algorithm> ::=
    DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128
    | DESX | AES_128 | AES_192 | AES_256 
<encrypting_mechanism> ::=
        CERTIFICATE certificate_name 
    |
    PASSWORD = 'password' 
    |
    SYMMETRIC KEY symmetric_key_name 
    |
    ASYMMETRIC KEY asym_key_name

引数

  • Key_name
    対称キーをデータベースで認識するための、一意の名前を指定します。一時キーの名前は、シャープ (#) 記号で始める必要があります。たとえば、#temporaryKey900007 のように指定します。2 つ以上の # で始まる名前の対称キーは作成できません。EKM プロバイダを使用して一時対称キーを作成することはできません。

  • AUTHORIZATION owner_name
    対称キーを所有するデータベース ユーザーまたはアプリケーション ロールの名前を指定します。

  • FROM PROVIDER Provider_Name
    拡張キー管理 (EKM) プロバイダと名前を指定します。EKM デバイスからはキーがエクスポートされません。最初に CREATE PROVIDER ステートメントを使用してプロバイダを定義する必要があります。外部キー プロバイダの作成の詳細については、「拡張キー管理 (EKM) について」を参照してください。

  • KEY_SOURCE ='pass_phrase'
    キーの派生元のパスフレーズを指定します。

  • IDENTITY_VALUE ='identity_phrase'
    一時キーで暗号化されるタグ付けデータの GUID の生成元となる ID 句を指定します。

  • key_name_in_provider
    拡張キー管理プロバイダで参照されている名前を指定します。

  • CREATION_DISPOSITION = CREATE_NEW
    拡張キー管理デバイス上で新しいキーを作成します。デバイスにキーが既に存在する場合は、ステートメントがエラーで失敗します。

  • CREATION_DISPOSITION = OPEN_EXISTING
    SQL Server の対称キーを、既存の拡張キー管理キーにマップします。CREATION_DISPOSITION = OPEN_EXISTING が指定されない場合、この既定値は CREATE_NEW です。

  • certificate_name
    対称キーの暗号化に使用する証明書の名前を指定します。証明書はデータベース内に存在する必要があります。

  • 'password'
    対称キーを保護する TRIPLE_DES キーの派生元パスワードを指定します。password は、SQL Server のインスタンスを実行しているコンピュータの Windows パスワード ポリシーの要件を満たす必要があります。複雑なパスワードの使用をお勧めします。

  • symmetric_key_name
    作成するキーの暗号化に使用する対称キーを指定します。指定したキーはデータベース内に存在し、開かれている必要があります。

  • asym_key_name
    作成するキーの暗号化に使用する非対称キーを指定します。この非対称キーはデータベース内に存在する必要があります。

説明

対称キーを作成するときには、証明書、パスワード、対称キー、非対称キー、PROVIDER のうち少なくとも 1 つを使用して対称キーを暗号化する必要があります。キーには種類ごとの暗号化を複数指定できます。つまり、1 つの対称キーを、複数の証明書、パスワード、対称キー、および非対称キーを使用して同時に暗号化できます。

注記注意

データベースのマスタ キーの公開キーではなく、パスワードを使用して対称キーを暗号化する場合は、TRIPLE DES 暗号化アルゴリズムが使用されます。このため、AES など、複雑な暗号化アルゴリズムで作成されたキーの場合、キー自身はそれより弱いアルゴリズムで保護されます。

キーを複数のユーザーに配布する前に、追加パスワードを使用して対称キーを暗号化できます。

一時キーは、そのキーを作成したユーザーが所有します。また一時キーは、現在のセッションでのみ有効です。

IDENTITY_VALUE では、新しい対称キーで暗号化されるデータをタグ付けするための GUID が生成されます。このタグ付けは、キーと暗号化データの照合に使用できます。特定の句で生成された GUID は常に同じになります。句を使用して GUID を生成した後は、句を使用してアクティブになっているセッションが 1 つでもあると、同じ句を再度使用することはできません。IDENTITY_VALUE は省略可能な句ですが、一時キーで暗号化したデータを保存する場合はこの句を使用することをお勧めします。

既定の暗号化アルゴリズムはありません。

重要な注意事項重要

重要なデータの保護には RC4 および RC4_128 ストリーム暗号を使用しないことをお勧めします。SQL Server では、こうしたキーで実行された暗号化をそれ以上エンコードしません。

対称キーに関する情報は、sys.symmetric_keys カタログ ビューで確認できます。

暗号プロバイダから作成された対称キーによって、対称キーを暗号化することはできません。

DES アルゴリズムに関する説明 :

  • DESX は不適切な名前でした。ALGORITHM = DESX を使用して作成された対称キーでは、実際には 192 ビット キーを使用した TRIPLE DES 暗号が使用されます。DESX アルゴリズムは提供されません。この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。 新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。

  • ALGORITHM = TRIPLE_DES_3KEY を使用して作成された対称キーでは、192 ビット キーを使用した TRIPLE DES が使用されます。

  • ALGORITHM = TRIPLE_DES を使用して作成された対称キーでは、128 ビット キーを使用した TRIPLE DES が使用されます。

非推奨の RC4 アルゴリズム :

異なるデータ ブロックに対して同じ RC4 または RC4_128 KEY_GUID を繰り返し使用すると、同一の RC4 キーが生成されます。これは、SQL Server が自動的に salt を提供しないためです。同一の RC4 キーを繰り返し使用することは、暗号強度を著しく低下させる既知のエラーです。そのため、RC4 キーワードおよび RC4_128 キーワードは使用しないことをお勧めします。この機能は、Microsoft SQL Server の将来のバージョンで削除されます。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションはできるだけ早く修正してください。

権限

データベースに対する ALTER ANY SYMMETRIC KEY 権限が必要です。AUTHORIZATION を指定する場合は、データベース ユーザーに対する IMPERSONATE 権限、またはアプリケーション ロールに対する ALTER 権限が必要です。証明書または非対称キーを使用して暗号化する場合は、証明書または非対称キーに対する VIEW DEFINITION 権限が必要です。対称キーを所有できるのは、Windows ログイン、SQL Server ログイン、およびアプリケーション ロールだけです。グループとロールは対称キーを所有できません。

A. 対称キーを作成する

次の例では、AES 256 アルゴリズムを使用して対称キー JanainaKey09 を作成し、新しいキーを証明書 Shipping04 を使用して暗号化します。

CREATE SYMMETRIC KEY JanainaKey09 WITH ALGORITHM = AES_256
    ENCRYPTION BY CERTIFICATE Shipping04;
GO

B. 一時対称キーを作成する

次の例では、パスフレーズ The square of the hypotenuse is equal to the sum of the squares of the sides から、一時対称キー #MarketingXXV を作成します。このキーには文字列 Pythagoras から生成された GUID が与えられ、証明書 Marketing25 を使用して暗号化されます。

CREATE SYMMETRIC KEY #MarketingXXV 
     WITH ALGORITHM = AES_128,
     KEY_SOURCE 
     = 'The square of the hypotenuse is equal to the sum of the squares of the sides',
     IDENTITY_VALUE = 'Pythagoras'
     ENCRYPTION BY CERTIFICATE Marketing25;
GO

C. 拡張キー管理 (EKM) デバイスを使用して対称キーを作成する

次の例では、MyEKMProvider というプロバイダとキー名 KeyForSensitiveData を使用して、MySymKey という対称キーを作成します。User1 に承認を割り当てています。また、システム管理者が MyEKMProvider というプロバイダを SQL Server に既に登録していることを前提としています。

CREATE SYMMETRIC KEY MySymKey
AUTHORIZATION User1
FROM PROVIDER EKMProvider
WITH
PROVIDER_KEY_NAME='KeyForSensitiveData',
CREATION_DISPOSITION=OPEN_EXISTING;
GO