クライアントの権限借用と委任

状況によっては、サーバー アプリケーションがクライアントに代わってアクセスするリソースにクライアント ID を提示する必要があります。通常は、クライアント ID に対してアクセス チェックまたは認証が実行されます。 一定の範囲で、サーバーはクライアントの ID (クライアントの権限借用と呼ばれるアクション) の下で動作できます。

権限借用とは、スレッドを所有するプロセスのコンテキストとは異なるセキュリティ コンテキストでスレッドを実行する機能です。 サーバー スレッドは、クライアントの資格情報を表すアクセス トークンを使用し、これにより、クライアントがアクセスできるリソースにアクセスすることができます。

権限借用を使用すると、サーバーはクライアントが実行できる操作とまったく同じ操作を実行できます。 クライアントが実行するアクセス許可に応じて、リソースへのアクセスが制限または拡張される場合があります。

データベースに接続するときに、データベースがクライアントを認証および承認できるように、サーバーがクライアントの権限を借用するように選択することもできます。 または、アプリケーションがセキュリティ記述子で保護されているファイルにアクセスし、クライアントがこれらのファイル内の情報への承認されたアクセスを取得できるようにする場合、アプリケーションはファイルにアクセスする前にクライアントの権限を借用できます。

権限借用を実装する方法

権限借用には、クライアントとサーバーの両方 (場合によってはシステム管理者) が参加する必要があります。 クライアントは、自身の ID をサーバーに使用させる意思を示す必要があり、サーバーは、プログラム上で明示的にクライアントの ID を想定する必要がある。 詳細については、「権限借用のクライアント側要件」と「権限借用のサーバー側要件」トピックを参照してください。

委任レベルの権限借用の管理状の要件

ネットワークを介したクライアントの権限借用である最も強力な形式の権限借用、委任を効果的に使用するには、それをサポートするために、(クライアントが委任レベルの権限借用を行う権限を付与することに加えて) 次のように、クライアントとサーバーのユーザーアカウントが Active Directory サービスで以下のように適切に構成されている必要があります。

  • サーバー ID は、Active Directory サービスで「委任に対して信頼されている」としてマークされている必要があります。
  • クライアント ID は、Active Directory サービスで「アカウントは機密であるため委任できません」とマークされていない必要があります。

これらの構成機能によりドメイン管理者は、信頼 (そしてそれゆえのセキュリティ リスク) の大きさを考慮した上で、望ましいとされる、委任の高度な制御を行うことができます。 委任の詳細については、「委任と権限借用」を参照してください。

クローキング

クライアントが権限借用レベルを通じてサーバーに付与する権限と共に、サーバーのクローキング機能によって、権限借用の動作が概ね決まります。 クローキングは、サーバーが、サーバー自身で、またはクライアントの代わりに呼び出しを行うときに、、サーバーによって実際に提示される ID に影響します。 詳細については、「クローキング」を参照してください。

パフォーマンスへの影響

権限借用は、パフォーマンスとスケーリングに大きな影響を与える可能性があります。 通常、呼び出しでクライアントの権限を借用する方が、直接呼び出しを行うよりもコストがかかります。 考慮すべき問題のいくつかを次に示します。

  • 特に動的クローキングが有効になっている場合に、複雑なパターンで ID を渡す計算オーバーヘッド。
  • 中間層で一元的に行うのではなく、多数の場所で冗長なセキュリティ チェックを適用する全般的な複雑さ。
  • データベース接続などのリソースは、クライアントの権限を借用して開いたときに、複数のクライアント間で再利用することはできません。これは、正常なスケーリングを妨げる非常に大きな障害となります。

場合によっては、問題の唯一の効果的な解決策は権限借用を使用することですが、この決定は慎重に検討する必要があります。 これらの問題の詳細については、「多層アプリケーション セキュリティ」を参照してください。

キュー コンポーネント

キュー コンポーネント は、権限借用をサポートしていません。 キューに登録されたオブジェクトに対してクライアントが呼び出しを行うと、実際にはレコーダーに対して呼び出しが行われ、メッセージの一部としてサーバーにパッケージ化されます。 その後、リスナーはキューからメッセージを読み取り、それをプレーヤーに渡します。これにより、実際のサーバー コンポーネントが呼び出され、同じメソッド呼び出しが行われます。 このため、サーバーが呼び出しを受信すると、権限借用によって元のクライアント トークンは使用することができなくなります。 ただし、ロールベースのセキュリティは引き続き適用され、ISecurityCallContext インターフェイスを使用したプログラムによるセキュリティが機能します。 詳細については、「キューコンポーネントのセキュリティ」を参照してください。

クライアント認証

ライブラリ アプリケーションのセキュリティ

多層アプリケーションのセキュリティ

プログラムによるコンポーネント セキュリティ

ロール ベースのセキュリティ管理

COM+ でのソフトウェア制限ポリシーの使用