プログラムによるコンポーネント セキュリティ
コンポーネントを含む COM+ アプリケーションでロール ベースのセキュリティを使用すると、コンポーネント内からプログラムによるセキュリティ機能にアクセスできます。 ロール メンバーシップを確認してコードの特定のセクションが実行されるかどうかを調べたり、セキュリティ呼び出しコンテキスト オブジェクトを使用してセキュリティ情報にアクセスしたり、現在の呼び出しでセキュリティが有効になっているかどうかを調べたりすることができます。 これらのタスクはすべて、SecurityCallContext オブジェクトへの参照 (Microsoft Visual Basic アプリケーションの場合) または ISecurityCallContext インターフェイスへのポインター (C および Microsoft Visual C++ アプリケーションの場合) を使用して実行することができます。
プログラムによるロール ベースのセキュリティについて詳しくは、このセクションの次のトピックをご覧ください。
偽装と COM セキュリティ機能
ロール ベースのセキュリティを使用しない COM+ アプリケーションでコンポーネントが使用されている場合、プログラムによるロール チェックとセキュリティ呼び出しコンテキスト情報は使用できません。 ただし、COM によって提供された、プログラムによるセキュリティ機能を使用することができます。 詳細については、「COM におけるセキュリティ」を参照してください。
COM によって提供されたセキュリティ機能のほとんどは使用できますが、COM+ アプリケーションの一部であるコンポーネントから CoInitializeSecurity を呼び出すことはできません。CoInitializeSecurity は、COM+ アプリケーションが実行されるサロゲートによって呼び出されるためです。 ただし、クライアントに関する情報を取得する他のセキュリティ関数 (CoQueryClientBlanket など) を呼び出すことができます。
特に、クライアントの ID を使用してリソースにアクセスする必要がある場合 (セキュリティ記述子によって保護されたファイルにアクセスしたり、クライアントの ID をデータベースに伝達したりするなど)、プログラムによって偽装を実行できます。 これを行うタイミングと方法について詳しくは、「クライアントの偽装と委任」をご覧ください。
セキュリティ機能のテスト
COM+ のプログラムによるセキュリティをコンポーネントで使用する場合、コンポーネントのセキュリティ機能をテストする準備ができたら、コンポーネントを COM+ アプリケーションに統合する必要があります。 COM+ プログラム セキュリティを使用するコンポーネントを COM+ アプリケーションに統合せずに実行すると、例外がスローされます。 そのため、このようなコンポーネントを COM+ 環境の一部ではないアプリケーションに正常に統合可能にする場合、これらの例外が適切に処理されるようにする必要があります。
セキュリティ要件のドキュメント化
ロール ベースのセキュリティを使用する COM+ アプリケーション用のスタンドアロン コンポーネントを作成する場合、コンポーネントを COM+ アプリケーションに統合するときにセキュリティを適切に構成できるように、コンポーネントをドキュメント化する必要があります。 たとえば、追加する必要があるロールを特定し、各ロールを割り当てる必要があるメソッドとインターフェイスを説明する必要があります。 加えて、IsCallerInRole("Teller") などのメソッドが呼び出された場合、Tellers のみがアクセスできる機能を記述する必要があります。 さらに、コンポーネント全体へのアクセスを保護するためにロールが必要かどうかを指定する必要もあります。
関連トピック