セキュリティ確認要求

更新 : 2010 年 7 月

特定のアクセス許可を与えられている呼び出し元だけがコードを呼び出せるようにするには、そのコードの呼び出し元に特定のアクセス許可またはアクセス許可セットが与えられていることを宣言的または強制的に要求します。 このような要求 (確認要求) を行うと、呼び出し元のコードに対して強制的に制限を適用するためのセキュリティ チェックがランタイムによって実行されます。 セキュリティ チェック時には、ランタイムがスタック ウォークを行い、コール スタック内のすべての呼び出し元のアクセス許可を調べて、要求されているアクセス許可が各呼び出し元に与えられているかどうかを確認します。 要求されたアクセス許可が与えられていない呼び出し元が見つかった場合には、セキュリティ チェックが失敗し、SecurityException がスローされます。 スタック ウォークを伴わない確認要求はリンク確認要求だけで、この場合は、直接の呼び出し元についてだけチェックが行われます。

セキュリティ チェックは、特定のメソッドが呼び出されたとき、またはコードの特定のブロックが実行される前に、必ず実行するように指定できます。 特定のクラスのメンバーが呼び出されたときにセキュリティ チェックを実行するようにする場合は、そのクラスの前に確認要求を配置し、クラスのすべてのメンバーにその確認要求が適用されるようにします。 以降では、必要に応じてセキュリティ確認要求を行う方法と、セキュリティ確認要求の種類を選択するときの基準について説明します。

保護されているリソースに直接アクセスするライブラリを作成する場合、そのような直接アクセスを呼び出し元に公開するには、そのライブラリでセキュリティ確認要求を実行して、コール スタック内のすべての呼び出し元がそのリソースへのアクセス許可を持っていることを検証できるようにする必要があります。 確認要求は、宣言的または強制的に実行できます。 クラス コンストラクターのコードは、特定の位置または特定のコンテキストで実行されるとは限らないため、クラス コンストラクターで確認要求を実行することは避ける必要があります。 クラス コンストラクターのコール スタックの状態は完全には定義されないため、クラス コンストラクターで確認要求を実行すると、予期しない、望ましくない結果が生じる可能性があります。

実行する確認要求の種類にかかわらず、次のガイドラインに従う必要があります。

  • オブジェクトのクラス レベルに確認要求を配置することによって、特定のアクセス許可を持っている呼び出し元だけがそのオブジェクトを作成できるようにします。 たとえば、FileStream クラスから派生した myFileStream というクラスがあり、適切な権限を与えられた呼び出し元だけが myFileStream のインスタンスを生成できるようにするとします。 そのためには、myFileStream によって生成されたストリームへのアクセス権を表す FileIOPermission オブジェクトを要求する宣言的な確認要求を、myFileStream クラスのクラス レベルに配置します。

  • 確認要求は、プロパティを設定または取得するコード内に配置することもできます。 一般に、プロパティにパスワードなどの機密情報が保持されていない限り、比較的制限の少ないアクセス許可に対する確認要求は、set アクセサーではなく get アクセサーに配置します。

    メモメモ

    ロール ベース セキュリティでのチェックは、コード アクセス セキュリティでのチェックとはセマンティクスがわずかに異なります。詳細については、「ロール ベース セキュリティ」を参照してください。

    メモメモ

    確認要求を適用することができるレベルは、クラス、メソッド、イベントおよびプロパティだけです。アセンブリや、プライベートではないメンバー変数は、確認要求で保護されません。アセンブリ レベルや非プライベート変数レベルに配置された確認要求では、コンパイラの警告は発生しませんしたがって、確認要求が提供する保護を確実に実行するには、パブリック メンバーの代わりにプロパティを使用することが重要です。

参照

参照

SecurityException

概念

コード アクセス セキュリティ

安全なクラス ライブラリの作成

履歴の変更

日付

履歴

理由

2010 年 7 月

廃止された情報を削除しました。

コンテンツ バグ修正