CREATE SYMMETRIC KEY (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

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

この機能は、データ層アプリケーション フレームワーク (DACFx) を使用してデータベースのエクスポートとの互換性はありません。 エクスポートする前に、すべての対称キーを削除する必要があります。

Transact-SQL 構文表記規則

注意

この構文は、Azure Synapse Analytics のサーバーレス 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

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

key_name

対称キーをデータベースで認識するための、一意の名前を指定します。 これは必須パラメーターです。 key_name が 1 つの井桁記号 (#) で始まる場合、一時キーが指定されます。 たとえば、#temporaryKey900007 のようにします。 複数の # で始まる名前の対称キーは作成できません。 EKM プロバイダーを使用して一時対称キーを作成することはできません。

AUTHORIZATION owner_name

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

FROM PROVIDER provider_name

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

Note

このオプションは、包含データベースでは使用できません。

KEY_SOURCE = 'pass_phrase'

キーの派生元のパスフレーズを指定します。

IDENTITY_VALUE = 'identity_phrase'

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

PROVIDER_KEY_NAME = 'key_name_in_provider'

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

Note

このオプションは、包含データベースでは使用できません。

CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

対称キーを作成するか、拡張キー管理デバイスにマッピングします。

  • CREATE_NEW

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

  • OPEN_EXISTING

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

certificate_name

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

'password'

対称キーを保護する TRIPLE_DES キーの派生元パスワードを指定します。 password は、Windows のパスワード ポリシーが SQL Server のインスタンスを実行するコンピューターに要求する条件を満足する必要があります。 強力なパスワードを常に使用してください。

symmetric_key_name

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

asym_key_name

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

<algorithm>

暗号化アルゴリズムを指定します。

警告

SQL Server 2016 (13.x) 以降、AES_128、AES_192、AES_256 以外のすべてのアルゴリズムが非推奨とされます。 古いアルゴリズムを使用する場合は (推奨されません)、データベース互換性レベルを 120 以下に設定する必要があります。

解説

対称キーを作成するときは、次のオプションの少なくとも 1 つを使用して対称キーを暗号化する必要があります。

  • certificate
  • password
  • 対称キー (symmetric key)
  • 非対称キー
  • プロバイダー

キーには種類ごとの暗号化を複数指定できます。 つまり、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 アルゴリズムは提供されません。 この機能は、 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 キーワードは非推奨とされます。 この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。

警告

RC4 アルゴリズムは、旧バージョンとの互換性のためにのみサポートされています。 データベース互換性レベルが 90 または 100 の場合、新しい素材は RC4 または RC4_128 を使用してのみ暗号化できます。 (非推奨)。AES アルゴリズムのいずれかなど、新しいアルゴリズムを使用してください。 SQL Server では、どの互換性レベルでも、RC4 または RC4_128 を使用して暗号化された素材を暗号化解除できます。

アクセス許可

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

関連項目