CREATE SYMMETRIC KEY (Transact-SQL)
適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics
SQL Server で、対称キーを生成し、プロパティを指定します。
この機能は、データ層アプリケーション フレームワーク (DACFx) を使用してデータベースのエクスポートとの互換性はありません。 エクスポートする前に、すべての対称キーを削除する必要があります。
注意
この構文は、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
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示