CREATE SYMMETRIC KEY (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