更新 : 2007 年 11 月
.NET Framework では、コード アクセス セキュリティによって、コードからアクセスできる対象が保護されたリソースと保護された操作に制限されます。共通言語ランタイムに対応するすべてのアプリケーションは、そのランタイムのセキュリティ システムと対話する必要があります。アプリケーションは実行時にランタイムによって自動的に評価され、一連のアクセス許可を与えられます。アプリケーションが受け取るアクセス許可に応じて、そのアプリケーションが正常に実行されるか、またはセキュリティ例外が生成されます。
コードが受け取るアクセス許可は、最終的にはそれぞれのコンピュータのローカル セキュリティ設定によって制御されます。これらの設定はコンピュータごとに異なる可能性があるため、作成したコードが実行に必要なアクセス許可を必ず受け取るかどうかはわかりません。詳細については、「コード アクセス セキュリティの基礎」を参照してください。
コード アクセス許可
コード アクセス許可オブジェクトは、承認されていないユーザーがリソースと操作を使用することを防止するために使用されます。アクセス許可オブジェクトは、マネージ コードにセキュリティ制限を適用するための共通言語ランタイムの機構の基本的な部分です。
コード アクセス許可により、ユーザーは保護されたリソース (ファイルなど) にアクセスしたり、保護されたアクション (マネージ コードへのアクセスなど) を実行したりできます。コード アクセス許可はすべてコードから要求でき、アクセス許可が付与されるかどうかはランタイムが決定します。各コード アクセス許可は CodeAccessPermission クラスから派生します。したがって、アクセス許可は一般的なメソッドとして、Assert、Demand、Deny、PermitOnly、IsSubSetOf、Intersect、Union の各メソッドを持ちます。
.NET Framework に用意されているアクセス許可
次の表は、.NET Framework に用意されているコード アクセス許可を示しています。
アクセス許可クラス |
実行できる操作 |
---|---|
ASP.NET によってホストされた環境のリソースへのアクセス。 |
|
System.DirectoryServices クラスへのアクセス。 |
|
ネットワーク上のドメイン ネーム システム (DNS: Domain Name System) サーバーへのアクセス。 |
|
環境変数の読み取りと書き込み。 |
|
イベント ログ サービスからの読み取りと書き込み。 |
|
[ファイルを開く] ダイアログ ボックスからのファイルの読み取りと書き込み。 |
|
ファイルまたはディレクトリからの読み取りと書き込み。 |
|
分離ストレージ内のファイルまたはディレクトリからの読み取りと書き込み。 |
|
管理されたメッセージ キュー (MSMQ とも呼ばれます) インターフェイスを通じてのメッセージ キューへのアクセス。 |
|
ODBC (Open Database Connectivity) データ ソースへのアクセス。 |
|
OLE DB を使用したデータベースへのアクセス。 |
|
Oracle データベースへのアクセス。 |
|
パフォーマンス カウンタへのアクセス。 |
|
プリンタへのアクセス。 |
|
実行時における型情報の確認。 |
|
レジストリ キーとレジストリ値の読み取り、書き込み、作成、および削除。 |
|
アクセス許可の実行とアサート、アンマネージ コードの呼び出し、検査のスキップ、およびその他のセキュリティ関連の権限。 |
|
実行中または停止中のサービスへのアクセス。 |
|
トランスポート アドレスでの接続の確立と承認。 |
|
SQL データベースへのアクセス。 |
|
ユーザー インターフェイスの機能へのアクセス。 |
|
Web アドレスでの接続の確立と承認。 |
独自のアクセス許可の作成
.NET Framework は、.NET Framework が公開するリソースを中心に、特定のリソースと操作をまとめて保護できるようにするための一連のコード アクセス許可クラスを提供します。ほとんどの場合は、組み込みのコード アクセス許可で十分です。しかし、場合によっては、独自のコード アクセス許可を定義する必要があります。詳細については、「独自のコード アクセス許可の作成」を参照してください。
ID アクセス許可
ID アクセス許可は、アセンブリを識別する特性を表します。共通言語ランタイムは、アセンブリに関して取得した情報に基づいて、アセンブリにその読み込み時に ID アクセス許可を与えます。詳細については、「ID アクセス許可」を参照してください。
ロール ベース アクセス許可
ビジネス アプリケーションでは、ユーザーによって提示される資格情報に基づいて、データやリソースへのアクセスを与えることがよくあります。このようなアプリケーションは、通常、ユーザーのロールを調べ、そのロールに基づいたリソースへのアクセスを許可します。共通言語ランタイムには、Windows アカウントまたはカスタム ID に基づくロール ベース承認のサポートが用意されています。詳細については、「ロール ベース セキュリティ」を参照してください。
セキュリティ タスク
次の表は、アクセス許可とセキュリティの関連タスクの一覧です。
実行内容 |
参照項目 |
---|---|
アンマネージ コードにアクセスするためのアクセス許可の要求 |
|
オプションのアクセス許可の要求 |
|
名前付きアクセス許可セットに対するアクセス許可の要求 |
|
XML でエンコードされたアクセス許可の要求 |
|
アクセス許可の拒否 |
|
強制セキュリティ チェックの実行 |
|
宣言セキュリティ チェックの実行 |
|
セキュリティ チェックのオーバーライド |
|
部分的な信頼のコードとのライブラリの共有 |
|
AllowPartiallyTrustedCallersAttribute アセンブリ内の型に対する完全信頼の要求 |
|
WindowsIdentity および WindowsPrincipal オブジェクトの作成 |
|
GenericPrincipal および GenericIdentity オブジェクトの作成 |
.NET Framework のセキュリティ ポリシー モデル
.NET Framework のセキュリティ ポリシー モデルは 5 つの要素で構成されます。各要素を次に示します。
エンタープライズ、マシン、ユーザー、アプリケーション ドメインの各セキュリティ ポリシー レベル
エンタープライズ、マシン、およびユーザー ポリシー レベル内に階層構造として存在するコード グループ
各コード グループに関連付けられている名前付きアクセス許可セット
コードの識別に関する情報を提供する証拠
コードに関する証拠を共通言語ランタイムに提供するアプリケーション ドメイン ホスト
セキュリティ ポリシー レベル
.NET Framework には、アセンブリまたはアプリケーション ドメインに与えるアクセス許可を計算するために、4 つのセキュリティ ポリシー レベルがあります。各ポリシー レベルには、それぞれ独自のコード グループ階層構造とアクセス許可セットがあります。ランタイムは、付与するアクセス許可セットを、ポリシー内のすべての参加レベルで付与するアクセス許可の合計として計算します。
次のようなレベルがあります。
エンタープライズ ポリシー。エンタープライズ構成ファイルが配布されているエンタープライズ設定に含まれるすべてのマネージ コードに適用されます。
コンピュータ ポリシー。コンピュータ上のすべてのマネージ コードに適用されます。
ユーザー ポリシー。共通言語ランタイムの起動時に現在のオペレーティング システムのユーザーに関連付けられている全プロセスに含まれるコードに適用されます。
アプリケーション ドメイン ポリシー。ホストのアプリケーション ドメインに含まれるマネージ コードに適用されます。
詳細については、「セキュリティ ポリシー レベル」を参照してください。
コード グループ
コード グループは、メンバシップについて特定の条件を持つコードの論理的な集まりです。このメンバシップ条件を満たす任意のコードが、そのコード グループのメンバになります。コード グループは、ポリシーの適用時に評価されるアクセス許可セットに関連付けられています。詳細については、「コード グループ」を参照してください。
名前付きアクセス許可セット
名前付きアクセス許可セットは、管理者がコード グループに関連付けることができる一連のアクセス許可です。名前付きアクセス許可セットは、少なくとも 1 つのアクセス許可と、そのアクセス許可セットの名前および説明とで構成されます。特定のアクセス許可セットに対して、複数のコード グループを関連付けることができます。
次の表は、共通言語ランタイムに用意されている名前付きアクセス許可セットを示しています。
名前 |
説明 |
---|---|
Nothing |
アクセス許可なし (コードは実行できません)。 |
Execution |
実行するためのアクセス許可。保護されているリソースの使用は許可されません。 |
Internet |
不明な発生元からのコンテンツに適した既定のポリシー アクセス許可セット。 |
Local Intranet |
エンタープライズ内の既定のポリシー アクセス許可セット。 |
Everything |
検証を省略するためのアクセス許可を除く、すべての標準 (組み込み) アクセス許可セット。 |
FullTrust |
すべてのリソースへの完全なアクセス許可。 |
詳細については、「名前付きアクセス許可セット」を参照してください。
証拠
証拠は、共通言語ランタイムがセキュリティ ポリシーに基づいてアクセス許可を決定するときに使用する情報です。証拠はランタイムに対して、コードには特定の特性があり、アプリケーションのディレクトリ、発行元、サイト、URL などを含めることができることを示します。詳細については、「証拠」を参照してください。
アプリケーション ドメイン ホスト
各 .NET Framework アプリケーションは、アプリケーション ドメインを作成し、そこにアセンブリを読み込むホストの制御下で、そのアプリケーション ドメイン内で実行されます。アプリケーション ドメインには次のホストを含めることができます。
ブラウザ ホスト。Web サイトのコンテキスト内でコードを実行します。
カスタム デザイン ホスト。ドメインを作成し、そのドメインにアセンブリ (動的アセンブリなど) を読み込みます。
サーバー ホスト。サーバーに送信された要求を処理するコードを実行します。
シェル ホスト。シェルからアプリケーション (.exe ファイル) を起動します。
次の表は、アプリケーション ドメイン関連のタスクの一覧です。
実行内容 |
参照項目 |
---|---|
アプリケーション ドメインの作成 |
|
アプリケーション ドメイン レベルのセキュリティ ポリシーの設定 |
|
アプリケーション ドメインの構成 |
|
特定のアプリケーション ドメインでの関数の呼び出し |
|
アプリケーション ドメインからのセットアップ情報の取得 |
|
アプリケーション ドメインのアンロード |
詳細については、「AppDomain」、「アプリケーション ドメイン ホスト」、および「アプリケーション ドメインを使用したプログラミング」を参照してください。