CREATE TRUSTED CONTEXT ステートメント

CREATE TRUSTED CONTEXT ステートメントは、現行サーバーでトラステッド・コンテキストを定義します。

重要: DATA_ENCRYPT 認証タイプは非推奨になっており、将来のリリースで除去される可能性があります。 クライアントと Db2® データベースの間で転送中のデータを暗号化するには、 Transport Layer Security (TLS)Db2 データベース・システム・サポートを使用することをお勧めします。 詳しくは、「 転送中のデータの暗号化」を参照してください。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むか、あるいは対話式に発行することができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。

許可

このステートメントの許可 ID が持つ特権には、SECADM 権限が含まれている必要があります。

構文

Read syntax diagramSkip visual syntax diagramCREATE TRUSTED CONTEXTcontext-name BASED UPON CONNECTION USINGSYSTEM AUTHIDauthorization-name ATTRIBUTES( ,1ADDRESSaddress-valueWITH ENCRYPTIONencryption-value2ENCRYPTIONencryption-value )NO DEFAULT ROLEDEFAULT ROLErole-nameDISABLEENABLEWITH USE FOR,authorization-nameROLErole-namePUBLICWITHOUT AUTHENTICATIONWITH AUTHENTICATION
Notes:
  • 1 Each combination of an attribute name and its corresponding value, as a pair, must be unique (SQLSTATE 4274D).
  • 2 ENCRYPTION cannot be specified more than once (SQLSTATE 42614); however, WITH ENCRYPTION can be specified for each ADDRESS that is specified.

説明

コンテキスト名
トラステッド・コンテキストの名前を指定します。 これは、1 部構成の名前です。 これは、SQL ID です (通常 ID または区切り ID)。 名前は、現行のサーバーに既に存在するトラステッド・コンテキストを識別するものであってはなりません (SQLSTATE 42710)。 名前を文字 SYS で始めることはできません (SQLSTATE 42939)。
BASED UPON CONNECTION USING SYSTEM AUTHID authorization-name (システム許可名を使用した接続に基づく)
コンテキストがシステム許可 ID authorization-name によって確立される接続であることを指定します。これを既存のトラステッド・コンテキストと関連付けてはなりません (SQLSTATE 428GL)。 これにステートメントの許可 ID を指定することはできません (SQLSTATE 42502)。
ATTRIBUTES (...)
トラステッド・コンテキストが定義される 1 つ以上の接続トラスト属性のリストを指定します。
ADDRESS アドレス値
クライアントがデータベース・サーバーと通信するために使用する実際の通信アドレスを指定します。 サポートされるプロトコルは TCP/IP のみです。 ADDRESS 属性は複数回指定できますが、address-value の対はそれぞれ属性のセットで固有でなければなりません (SQLSTATE 4274D)。

トラステッド接続を確立するときにトラステッド・コンテキストの ADDRESS 属性に対して複数の値が定義されている場合、候補となる接続によって使用されるアドレスがトラステッド・コンテキストの ADDRESS 属性の定義値のいずれかと一致していると、その接続はこの属性と一致しているとみなされます。 ADDRESS 属性が指定されると、候補接続は少なくとも 1 つの指定された address-valueと一致する必要があります。

アドレス値
ADDRESS トラスト属性と関連付けられる値を含むストリング定数を指定します。 address-value は、IPv4 アドレス、IPv6 アドレス、またはセキュア・ドメイン・ネームでなければなりません。
  • IPv4 アドレスの先頭にスペースが含まれていてはなりません。 このアドレスは小数点付き 10 進数アドレスとして表されます。 例えば IPv4 アドレスは 9.112.46.111 のようになります。 値 'localhost' またはそれに相当する表現 '127.0.0.1' は、一致という結果になりません。 代わりにホストの実 IPv4 アドレスを指定する必要があります。
  • IPv6 アドレスの先頭にスペースが含まれていてはなりません。 このアドレスはコロン区切りの 16 進アドレスとして表されます。 例えば IPv6 アドレスは 2001:0DB8:0000:0000:0008:0800:200C:417A のようになります。 IPv4 がマップされた IPv6 アドレス (例えば ::ffff:192.0.2.128) は、一致という結果になりません。 同じように、'localhost' またはその IPv6 短表現 '::1' も一致という結果になりません。
  • ドメイン・ネームはドメイン・ネーム・サーバーで IP アドレスに変換されます。 結果として生成される IPv4 または IPv6 アドレスはこのサーバーで決定されます。 例えばドメイン・ネームは corona.torolab.ibm.com のようになります。 ドメイン・ネームが IP アドレスに変換されたとき、この変換の結果が 1 つ以上の IP アドレスのセットになる場合があります。 その場合、接続開始時の IP アドレスがドメイン名変換後の IP アドレスのいずれかと一致すると、着信接続はトラステッド・コンテキスト・オブジェクトの ADDRESS 属性と一致しているとみなされます。 トラステッド・コンテキスト・オブジェクトを作成するとき、特に動的ホスト構成プロトコル (DHCP) 環境では、静的 IP アドレスの代わりにドメイン・ネーム値を ADDRESS 属性に提供することをお勧めします。 DHCP ではデバイスがネットワークと接続するたびに IP アドレスが変わります。 そのため、トラステッド・コンテキスト・オブジェクトの ADDRESS 属性に静的 IP アドレスを提供すると、デバイスによっては意図せずにトラステッド接続を取得してしまう場合があります。 トラステッド・コンテキスト・オブジェクトの ADDRESS 属性にドメイン・ネームを指定すると、DHCP 環境におけるこの問題を回避できます。
WITH ENCRYPTION 暗号化値
この特定の address-value に関するデータ・ストリームまたはネットワーク暗号化の最小暗号化レベルを指定します。 この encryption-value は、この特定の address-value に関するグローバル ENCRYPTION 属性の設定をオーバーライドします。
暗号化値
この特定の address-value に関する ENCRYPTION トラスト属性と関連付けられる値を含むストリング定数を指定します。 encryption-value は、以下のいずれかの値でなければなりません (SQLSTATE 42615)。
  • NONE。特定レベルの暗号化は不要です。
  • LOW。最小の低レベルの暗号化が必要です。 着信接続がこの特定アドレスの暗号化設定と一致する場合、データベース・マネージャーの認証タイプは DATA_ENCRYPT でなければなりません。
  • HIGH。着信接続がこの特定アドレスの暗号化設定と一致する場合、データベース・クライアントとデータベース・サーバーの間のデータ通信に Secure Sockets Layer (SSL) 暗号化または同等のものを使用する必要があります。
ENCRYPTION 暗号化値
データ・ストリームまたはネットワーク暗号化の最小暗号化レベルを指定します。 デフォルトは「なし」です。
暗号化値
この特定の address-value に関する ENCRYPTION トラスト属性と関連付けられる値を含むストリング定数を指定します。 encryption-value は、以下のいずれかの値でなければなりません (SQLSTATE 42615)。
  • NONE。着信接続がこのトラステッド・コンテキスト・オブジェクトの ENCRYPTION 属性と一致する場合、特定レベルの暗号化は不要です。
  • LOW。最小の低レベルの暗号化が必要です。着信接続がこのトラステッド・コンテキスト・オブジェクトの ENCRYPTION 属性と一致する場合、データベース・マネージャーの認証タイプは DATA_ENCRYPT でなければなりません。
  • HIGH。着信接続がこのトラステッド・コンテキスト・オブジェクトの ENCRYPTION 属性と一致する場合、データベース・クライアントとデータベース・サーバーの間のデータ通信に Secure Sockets Layer (SSL) 暗号化または同等のものを使用する必要があります。
以下の表は、既存の接続で使用される暗号化に応じたトラステッド・コンテキストの使用可能性について要約しています。 接続でトラステッド・コンテキストを使用できない場合は警告が戻され (SQLSTATE 01679)、 SQLCA の SQLWARN8 フィールドが 'Y' に設定されます。 これは接続が通常の (非トラステッド) 接続であることを示します。
表 1. 暗号化とトラステッド・コンテキスト
既存の接続で使用される暗号化 トラステッド・コンテキストの ENCRYPTION 値 接続でトラステッド・コンテキストを使用できるかどうか
暗号化なし 'NONE' はい
暗号化なし 'LOW' いいえ
暗号化なし 'HIGH' いいえ
低レベルの暗号化 (DATA_ENCRYPT) 'NONE' はい
低レベルの暗号化 (DATA_ENCRYPT) 'LOW' はい
低レベルの暗号化 (DATA_ENCRYPT) 'HIGH' いいえ
高レベルの暗号化 (SSL) 'NONE' はい
高レベルの暗号化 (SSL) 'LOW' はい
高レベルの暗号化 (SSL) 'HIGH' はい
NO DEFAULT ROLE または DEFAULT ROLE role-name
デフォルトのロールをこのトラステッド・コンテキストに基づくトラステッド接続と関連付けるかどうかを指定します。 デフォルトは NO DEFAULT ROLE です。
NO DEFAULT ROLE
トラステッド・コンテキストがデフォルトのロールを持たないことを指定します。
DEFAULT ROLE ロール名
role-name がトラステッド・コンテキストのデフォルトのロールであることを指定します。 role-name は現行のサーバーに存在するロールを識別するものでなければなりません (SQLSTATE 42704)。 トラステッド・コンテキストの定義の一部としてユーザー固有のロールがユーザーに定義されていない場合、このトラステッド・コンテキストに基づいて、トラステッド接続の中でこのロールがそのユーザーに使用されます。
DISABLE または ENABLE
トラステッド・コンテキストを使用可能の状態で作成するか、または使用不可の状態で作成するかを指定します。 デフォルトは DISABLE です。
DISABLE
トラステッド・コンテキストを使用不可の状態で作成することを指定します。 トラステッド接続を確立するとき、使用不可のトラステッド・コンテキストは考慮されません。
ENABLE
トラステッド・コンテキストを使用可能の状態で作成することを指定します。
WITH USE FOR
このトラステッド・コンテキストに基づくトラステッド接続を使用できるユーザーを指定します。
許可名
指定された authorization-name でトラステッド接続を使用できることを指定します。 WITH USE FOR 節内に authorization-name を複数回指定することはできません (SQLSTATE 428GM)。 これにステートメントの許可 ID を指定することもできません (SQLSTATE 42502)。 トラステッド・コンテキストの定義で PUBLIC とユーザーのリストの両方からのアクセスが許可されている場合、ユーザーの指定が PUBLIC の指定をオーバーライドします。 例えば、トラステッド・コンテキストの定義で PUBLIC WITH AUTHENTICATION と JOE WITHOUT AUTHENTICATION 両方のアクセスが許可されているとします。 トラステッド・コンテキストが JOE によって使用される場合、認証は不要です。 しかし、トラステッド・コンテキストが GEORGE によって使用される場合は認証が必要になります。
ROLE ロール名
トラステッド接続がトラステッド・コンテキストを使用しているときに使用されるユーザーのロールが role-name であることを指定します。 role-name は現行のサーバーに存在するロールを識別するものでなければなりません (SQLSTATE 42704)。 ユーザーに対して明示的に指定されたロールは、トラステッド・コンテキストと関連付けられているすべてのデフォルトのロールをオーバーライドします。
PUBLIC
すべてのユーザーがこのトラステッド・コンテキストに基づくトラステッド接続を使用できることを指定します。 PUBLIC を複数回指定することはできません (SQLSTATE 428GM)。 そのようなトラステッド接続を使用するユーザーはすべて、関連したトラステッド・コンテキストについてデフォルトのロールと関連付けられている特権を使用します。 トラステッド・コンテキストでデフォルトのロールが定義されない場合、このトラステッド・コンテキストに基づくトラステッド接続を使用するユーザーにロールが関連付けられません。
WITHOUT AUTHENTICATION または WITH AUTHENTICATION
トラステッド接続でユーザーを切り替えるときにユーザーの認証が必要かどうかを指定します。 デフォルトは WITHOUT AUTHENTICATION です。
WITHOUT AUTHENTICATION
トラステッド接続で現行のユーザーをこのユーザーに切り替えるときに認証を必要としないことを指定します。
WITH AUTHENTICATION
トラステッド接続で現行のユーザーをこのユーザーに切り替えるときに認証を必要とすることを指定します。

ルール

  • トラステッド・コンテキスト排他 SQL ステートメントの後は、COMMIT または ROLLBACK ステートメントでなければなりません (SQLSTATE 5U021)。 トラステッド・コンテキスト排他 SQL ステートメントは次のとおりです。
    • CREATE TRUSTED CONTEXT、ALTER TRUSTED CONTEXT、または DROP (TRUSTED CONTEXT)
  • グローバル・トランザクション内でトラステッド・コンテキスト排他 SQL ステートメントを発行することはできません。 例えば、フェデレーテッド・トランザクションにおける 2 フェーズ・コミットの一部として開始されるグローバル・トランザクションまたは XA トランザクションなどの場合です (SQLSTATE 51041)。

  • トラステッド・コンテキスト定義の一部として IP アドレスを提供するとき、そのアドレスの形式はネットワークで有効なものでなければなりません。 例えば、ネットワークが IPv4 であるのに IPv6 形式のアドレスを提供しても一致には至りません。 混合環境では、IPv4 と IPv6 両方のアドレス表現を指定するとよいでしょう。 さらに望ましいのは、セキュア・ドメイン・ネーム (例えば corona.torolab.ibm.com) を指定することです。 その場合、アドレス・フォーマットの詳細が非表示になるからです。
  • トラステッド・コンテキストの定義にロールを指定する: トラステッド・コンテキストの定義では、特定の許可 ID のロールと、トラステッド・コンテキストの定義で特定のロールが指定されていない許可 ID で使用されるデフォルトのロールを指定することができます。 このロールはトラステッド・コンテキストに基づくトラステッド接続では使用できますが、その接続外では使用できません。
  • トラステッド接続を使用してデータ操作言語 (DML) SQL ステートメントを発行すると、関連トラステッド・コンテキストの定義内の許可 ID で有効なコンテキストが割り当てられたロールが保持する特権は、ステートメントの許可 ID によって直接保持される、またはステートメントの許可 ID が保持するその他のロールによって間接的に保持されるその他の特権に加えて考慮されます。
  • データ定義言語 (DDL) SQL ステートメントでは、関連トラステッド・コンテキストの定義内の許可 ID で有効なコンテキストが割り当てられたロールが保持する特権は考慮されません。 例えば、オブジェクトを作成する場合は、ステートメントの許可 ID はコンテキストに割り当てられたロールが保持する特権を組み込まずに作成することができなければなりません。
  • 同じマシン上で既存のアプリケーションと同じ資格情報を使用してデータベース・サーバーを認証する新規アプリケーションをインストールし、それがトラステッド・コンテキストを利用する場合、新規アプリケーションも同じトラステッド・コンテキスト・オブジェクトを利用する可能性があります (例えばトラステッド・コンテキストのロールを継承するなど)。 これはセキュリティー管理者の意図ではない可能性があります。 セキュリティー管理者はデータベース監査機能をオンにして、トラステッド・コンテキスト・オブジェクトを利用しているアプリケーションを見つけ出すこともできます。
  • データベース・パーティション全体を通じて、同時に実行できる非コミットのトラステッド・コンテキスト排他 SQL ステートメントは 1 つのみです。 非コミットのトラステッド・コンテキスト排他 SQL ステートメントが実行されている場合、後続のトラステッド・コンテキスト排他 SQL ステートメントは、現行のトラステッド・コンテキスト排他 SQL ステートメントがコミットまたはロールバックされるまで待機します。
  • 変更はシステム・カタログに書き込まれますが、コミットされるまでは有効になりません。 これは、ステートメントを発行する接続の場合でも当てはまります。

  • 例 1: このトラステッド・コンテキストに基づくトラステッド接続の現行ユーザーを 2 つの異なるユーザー ID に切り替えられるようにトラステッド・コンテキストを作成します。 接続の現行ユーザーがユーザー ID JOE に切り替えられる場合には認証を必要としません。 しかし、接続の現行ユーザーがユーザー ID BOB に切り替えられる場合には認証が必要になります。 トラステッド・コンテキストは context-role というデフォルトのロールを持ちます。 これは、このトラステッド・コンテキストの領域内で作業しているユーザーがロール context-role と関連付けられている特権を継承することを暗黙に示します。
       CREATE TRUSTED CONTEXT APPSERVER
         BASED UPON CONNECTION USING SYSTEM AUTHID WRJAIBI
         DEFAULT ROLE CONTEXT_ROLE
         ENABLE
         ATTRIBUTES (ADDRESS '9.26.113.204')
         WITH USE FOR JOE WITHOUT AUTHENTICATION
           BOB WITH AUTHENTICATION
  • 例 2: このトラステッド・コンテキストに基づくトラステッド接続の現行ユーザーを、認証なしで任意のユーザー ID に切り替えられるようにトラステッド・コンテキストを作成します。
       CREATE TRUSTED CONTEXT SECUREROLE
         BASED UPON CONNECTION USING SYSTEM AUTHID PBIRD
         ENABLE
         ATTRIBUTES (ADDRESS '9.26.113.204')
         WITH USE FOR PUBLIC WITHOUT AUTHENTICATION
  • 例 3: このトラステッド・コンテキストに基づくトラステッド接続の現行ユーザーを、認証なしで任意のユーザー ID に切り替えられるようにトラステッド・コンテキストを作成します。 このトラステッド・コンテキストと例 2 で作成したトラステッド・コンテキストの違いは、このトラステッド・コンテキストには ENCRYPTION という追加属性があるという点です。 トラステッド・コンテキスト SECUREROLEENCRYPT の ENCRYPTION 属性設定は、このトラステッド・コンテキスト属性と一致するためには、接続によって使用される暗号化設定が少なくとも「低暗号化」でなければならないことを示しています ( 表 1を参照)。
       CREATE TRUSTED CONTEXT SECUREROLEENCRYPT
         BASED UPON CONNECTION USING SYSTEM AUTHID SHARPER
         ENABLE
         ATTRIBUTES (ADDRESS '9.26.113.204'
           ENCRYPTION 'LOW')
         WITH USE FOR PUBLIC WITHOUT AUTHENTICATION
  • 例 4: アドレス 9.26.146.201 および 9.26.146.203 からユーザー WRJAIBI によって確立される接続は暗号化が使用されていないときにトラステッド接続となり、アドレス 9.26.146.202 からユーザー WRJAIBI によって確立される接続ではトラステッド接続となるために LOW レベルの暗号化を必要とするようなトラステッド・コンテキストを作成します。
       CREATE TRUSTED CONTEXT WALIDLOCSENSITIVE
         BASED UPON CONNECTION USING SYSTEM AUTHID WRJAIBI
         ENABLE
         ATTRIBUTES (ADDRESS '9.26.146.201',
           ADDRESS '9.26.146.202' WITH ENCRYPTION 'LOW',
           ADDRESS '9.26.146.203'
           ENCRYPTION 'NONE')