トラステッド・コンテキストおよびトラステッド接続

トラステッド・コンテキストとは、データベースと外部エンティティー (アプリケーション・サーバーなど) の間の接続における信頼関係を定義するデータベース・オブジェクトのことをいいます。

信頼関係は、以下の属性のセットに基づいています。
  • システム許可 ID: データベース接続を確立するユーザーを表します
  • IP アドレス (またはドメイン・ネーム): データベース接続を確立するホストを表します
  • データ・ストリーム暗号化: データベース・サーバーとデータベース・クライアントの間のデータ通信のための暗号化設定がある場合にはそれを表します
ユーザーがデータベース接続を確立すると、 Db2® データベース・システムは、接続がデータベース内のトラステッド・コンテキスト・オブジェクトの定義と一致するかどうかを検査します。 一致していた場合、データベース接続は信頼できると見なされます。

接続をプロセス間通信 (IPC) を使用するローカル・データベースに対して行う場合、トラステッド接続は確立できません。

トラステッド接続を使用すると、このトラステッド接続の起動側では、トラステッド接続の有効範囲外では使用できない追加機能を取得することができます。 追加機能は、トラステッド接続が明示的であるか暗黙的であるかによって異なります。

明示的トラステッド接続の起動側には以下の機能があります。
  • その接続の現行ユーザー ID を、認証のあるなしに関係なく別のユーザー ID に切り替える
  • トラステッド・コンテキストのロール継承フィーチャーにより追加の特権を取得する
暗黙的トラステッド接続は、明示的に要求されていないトラステッド接続で、明示的トラステッド接続要求ではなく通常の接続要求により確立されます。 暗黙接続を取得するためにアプリケーション・コードを変更する必要はありません。 また、暗黙的トラステッド接続を取得するかどうかは、接続戻りコードには影響はありません (明示的トラステッド接続を要求する場合は、接続戻りコードは要求が成功したかどうかを示します)。 暗黙的トラステッド接続の起動側は、トラステッド・コンテキストのロール継承フィーチャーにより追加の特権を取得できるだけで、ユーザー ID を切り替えることはできません。

トラステッド・コンテキストを使用するとどのようにセキュリティーが向上するか

3 層アプリケーション・モデルは、クライアント・アプリケーションとデータベース・サーバーの間に中間層を置くことにより、標準的な 2 層クライアントおよびサーバー・モデルを拡張します。 ここ数年、特に Web ベース・テクノロジーと Java™ 2 Enterprise Edition (J2EE) プラットフォームの出現により、高い人気を得ています。 3 層アプリケーション・モデルをサポートするソフトウェア製品の例として、 IBM® WebSphere® Application Server (WAS) があります。

3 層アプリケーション・モデルでは、クライアント・アプリケーションを実行するユーザーの認証、およびデータベース・サーバーとの相互作用の管理は、中間層が処理します。 従来の方法では、データベース・サーバーとのすべての相互作用は、データベース・サーバーに対して中間層を識別するユーザー ID と資格情報の組み合わせを使用して、その中間層により確立されたデータベース接続を介して行われます。 つまり、データベース・サーバーは、中間層のユーザー ID に関連付けられたデータベース特権を使用して、すべてのデータベース・アクセスで行う必要がある許可検査および監査を行います。これには、ユーザーの代わりに中間層により実行されるアクセスも含まれます。

3 層アプリケーション・モデルには多くの利点がありますが、データベース・サーバーとのすべての相互作用 (例えば、ユーザー要求) を中間層の許可 ID で行うようにすると、いくつかのセキュリティー上の問題が生じます。これらを要約すると以下のようになります。
  • ユーザー ID の消失

    企業によっては、アクセス制御の目的で、データベースにアクセスしている実際のユーザーの ID を知りたい場合があります。

  • ユーザーの説明責任の減少

    監査による説明責任は、データベース・セキュリティーにおける基本原則です。 ユーザーの ID が不明であると、中間層の固有の目的のために中間層により実行されるトランザクションと、ユーザーのために中間層により実行されるトランザクションを区別することが難しくなります。

  • 中間層の許可 ID に特権を付与しすぎる

    中間層の許可 ID には、すべてのユーザーからのすべての要求を実行するために必要なすべての特権が含まれていなければなりません。 これには、特定の情報にアクセスする必要がないユーザーがアクセス権限を取得できてしまうというセキュリティー問題があります。

  • 弱いセキュリティー

    前述の特権の問題に加えて、現行方式では、接続するために中間層により使用される許可 ID には、ユーザー要求によりアクセスされる可能性があるすべてのリソースへの特権を付与する必要があります。 中間層の許可 ID の暗号漏えいが発生すると、それらすべてのリソースは公開されてしまいます。

  • 同じ接続を使用するユーザー間で相互に影響を及ぼす

    直前のユーザーによる変更が現行ユーザーに影響を与える場合があります。

明らかに、実際のユーザーの ID およびデータベース特権が、そのユーザーに代わって中間層により実行されるデータベース要求で使用されるようなメカニズムが必要です。 この目標を達成するための最も簡単な方法は、中間層がユーザーの ID とパスワードを使用して新規接続を確立した後、ユーザーの要求をその接続を介して送信するというものです。 この方法は単純ですが、以下に挙げるようないくつかの欠点があります。
  • 特定の中間層では不適当。 多くの中間層サーバーには、接続を確立するために必要なユーザー認証資格情報がありません。
  • パフォーマンス上のオーバーヘッド。 新しい物理接続を作成し、データベース・サーバーでユーザーを再認証することに関連した、パフォーマンス上の明らかなオーバーヘッドがあります。
  • 保守上のオーバーヘッド。 一元的なセキュリティー・セットアップ、またはシングル・サインオンを使用していない状況では、2 つのユーザー定義 (1 つは中間層上、もう 1 つはサーバー上) を持つことによる保守上のオーバーヘッドがあります。 この状況では、異なる場所にあるパスワードを変更することが必要です。
トラステッド・コンテキスト機能は、この問題を解決します。 セキュリティー管理者は、データベースと中間層の間の信頼関係を定義するトラステッド・コンテキスト・オブジェクトをデータベースに作成できます。 その後、中間層ではデータベースへの明示的トラステッド接続を確立できますが、この接続では、接続の現行ユーザー ID を、認証のあるなしに関係なく別のユーザー ID に切り替える機能が中間層に付与されます。 トラステッド・コンテキストは、エンド・ユーザーの ID アサーション問題を解決するだけでなく、別の利点もあります。 それは、データベース・ユーザーが特権を使用できるようになる時期を制御する機能です。 ユーザーが特権を使用できる時期を制御できないと、全体的なセキュリティーの低下につながります。 例えば、特権が、最初に意図した目的以外で使用される場合があります。 セキュリティー管理者は、1 つ以上の特権を 1 つのロールに割り当て、そのロールをトラステッド・コンテキスト・オブジェクトに割り当てることができます。 そのトラステッド・コンテキストの定義と一致するトラステッド・データベース接続 (明示的または暗黙的) のみがそのロールに関連付けられた特権を利用できます。

パフォーマンスの向上

トラステッド接続を使用すると以下の利点があるため、パフォーマンスを最大限に発揮します。
  • 接続の現行ユーザー ID が切り替わる時に新規接続は確立されません。
  • トラステッド・コンテキスト定義が切り替え先のユーザー ID の認証を必要としない場合には、データベース・サーバーで新規ユーザーを認証することに関連したオーバーヘッドは発生しません。

トラステッド・コンテキストの作成例

セキュリティー管理者が以下のトラステッド・コンテキスト・オブジェクトを作成すると想定します。
CREATE TRUSTED CONTEXT CTX1
 	BASED UPON CONNECTION USING SYSTEM AUTHID USER2
 	ATTRIBUTES (ADDRESS   '192.0.2.1')
  DEFAULT ROLE managerRole
   ENABLE
ユーザー user1 が IP アドレス 192.0.2.1からトラステッド接続を要求すると、 Db2 データベース・システムは、トラステッド接続を確立できなかったことを示す警告 (SQLSTATE 01679、SQLCODE + 20360) を戻し、そのユーザー user1 は単に非トラステッド接続を取得します。 しかし、ユーザー user2 が IP アドレス 192.0.2.1 からトラステッド接続を要求した場合には、接続属性はトラステッド・コンテキスト CTX1 により条件が満たされるため、要求は受け入れられます。 ユーザー user2 はトラステッド接続を確立したため、そのユーザーはトラステッド・コンテキストのロール managerRole に関連付けられたすべての特権および権限を取得できます。 このトラステッド接続の有効範囲外では、ユーザー user2 はこれらの特権および権限を使用できません。