解説

インサイド .NET Framework [改訂版]

第8回 コード・アクセス・セキュリティ(その3)

吉松 史彰
2003/08/27
Page1 Page2 Page3 Page4 Page5

アクセス許可

 上記の手順で、エビデンスを変化させながらアクセス許可セットの中身を列挙していけば、アクセス許可セットにどんなアクセス許可が含まれているのかが分かる。だが、アクセス許可の具体的な内容が分からなければ、何が含まれているかを知っても無意味なので、ここからは、.NET Frameworkにデフォルトで用意されているアクセス許可について代表的なものを列挙する。なお、すべてのデフォルトで用意されているアクセス許可は、System.Security.CodeAccessPermissionクラスから派生したクラスとして、.NET Frameworkクラス・ライブラリの中で定義されている。そのため以下ではそのクラス名を使って解説する。

■System.DirectoryServices.DirectoryServicesPermission

 Active Directory Services Interface(ADSI)を利用して、ディレクトリ・サービス内のオブジェクトにアクセスする権限を表す。このアクセス許可には、パスとアクセスの組み合わせを定義することができる。PermissionEntriesプロパティに、DirectoryServicesPermissionAccess列挙の値と、ディレクトリ・サービス上のパスを組み合わせて追加できる。

■System.Net.DnsPermission

 System.Net.Dnsクラスを使って、DNSサーバを利用した名前解決を行う権限を表す。このアクセス許可には追加のプロパティはない。DNSへのアクセスは、できるかできないかの2つに1つである。

■System.Diagnostics.EventLogPermission

 Windowsが持っているイベント・ログに対してログを記録したり読み取ったりする権限を表す。このアクセス許可には、マシンの名前とアクセスの組み合わせを定義することができる。PermissionEntriesプロパティに、EventLogPermissionAccess列挙の値と、マシン名を組み合わせて追加できる。

■System.Security.Permissions.EnvironmentPermission

 Windowsの環境変数にアクセスする権限を表す。このアクセス許可には、環境変数の名前(セミコロンで区切って複数指定できる)とアクセスの組み合わせを定義することができる。AddPathListメソッドを使って、EnvironmentPermissionAccess列挙の値と、環境変数名を組み合わせて追加できる。

■System.Security.Permissions.FileIOPermission

 System.IO名前空間のクラスを利用して、ファイル入出力を行う権限を表す。このアクセス許可には、ファイルまたはフォルダへのパスとアクセスの組み合わせを定義することができる。AddPathListメソッドを使って、FileIOPermissionAccess列挙の値と、パスを組み合わせて追加できる。

■System.Security.Permissions.FileDialogPermission

 System.Windows.Forms.FileDialogクラスを利用して、「ファイルを開く」「名前を付けて保存」の2つの、いわゆるコモン・ダイアログ・ボックスを利用する権限を表す。このアクセス許可には、どのダイアログにアクセスできるかを表すフラグを、FileDialogPermissionAccess列挙の値で設定できる。

■System.Security.Permissions.IsolatedStorageFilePermission

 System.IO.IsolatedStorage名前空間のクラスを利用して、分離ストレージにアクセスする権限を表す。このアクセス許可には、アプリケーションが分離ストレージを使用できるかどうかと、使用できる場合は、IsolatedStorageContainment列挙の値を利用して、使用を許可されているアセンブリのIDの組み合わせを設定できる。また、使用できる場合のユーザーごとの最大許容量(クォータ)をUserQuotaプロパティに設定できる。

■System.Messaging.MessageQueuePermission

 System.Messaging.MessageQueueクラスを使って、Windowsのメッセージキュー・サービスを利用する権限を表す。このアクセス許可には、メッセージキューのカテゴリ、ラベル、パスなどと、そのキューへのアクセスの組み合わせを定義することができる。PermissionEntriesプロパティに、MessageQueuePermissionAccess列挙の値と、キューを識別する名前などを組み合わせて追加できる。

■System.Data.OleDb.OleDbPermission

 System.Data.OleDb名前空間のクラスを利用して、OLE DBプロバイダを利用する権限を表す。このアクセス許可には、空のパスワードを許可するかどうかと、利用を許可するOLE DBプロバイダを設定することができる。

■System.Diagnostics.PerformanceCounterPermission

 System.Diagnostics.PerformanceCounterクラスを使って、Windowsのパフォーマンス・カウンタを利用する権限を表す。このアクセス許可には、マシン名、カテゴリ名とアクセスの組み合わせを定義することができる。PermissionEntriesプロパティにPerformanceCounterPermissionAccess列挙の値と、マシン名、カテゴリ名を指定して追加できる。

■System.Drawing.Printing.PrintingPermission

 プリンタを利用する権限を表す。このアクセス許可には、提供される印刷機能のレベルを表すPrintingPermissionLevel列挙の値をLevelプロパティに定義できる。

■System.Security.Permissions.RegistryPermission

 レジストリにアクセスする権限を表す。このアクセス許可には、レジストリのあるキーへのパスとアクセスの組み合わせを定義することができる。AddPathListメソッドを使って、RegistryPermissionAccess列挙の値と、パスを組み合わせて追加することができる。

■System.Security.Permissions.ReflectionPermission

 System.Reflection名前空間のクラスを使って実行時に型情報を取り出したり、System.Reflection.Emit名前空間のクラスを使って実行時に型を作成したりする権限を表す。このアクセス許可には、ReflectionPermissionFlag列挙の値を使って、どのレベルの情報にアクセスできるか(または作成できるか)をFlagsプロパティに設定できる。

■System.Security.Permissions.SecurityPermission

 基礎的なセキュリティ上の権限を表す。このアクセス許可は、FlagsプロパティにSecurityPermissionFlagの値(下表)を設定して、内容の異なるいくつかの権限を表すことができる。

SecurityPermissionFlag 説明
AllFlags すべての機能を有効にする
Assertion アクセス許可のアサート機能(詳細は次回以降に解説)を有効にする
ControlAppDomain AppDomainを作成・操作できる
ControlDomainPolicy AppDomainレベルのポリシーを指定できる
ControlEvidence エビデンスにアクセスする
ControlPolicy 今回解説しているポリシーを表示および変更できる
ControlPrincipal ロールベース・セキュリティで利用されるプリンシパルを操作できる
ControlThread スレッドを操作できる
Execution マネージ・コードを実行できる(そもそもこの権限を持たないコードは一切実行されない)
Infrastructure .NETリモーティング(リモート処理)のインフラにアクセスできる
NoFlags すべての機能が無効
RemotingConfiguration .NETリモーティングの構成ができる
SerializationFormatter .NETリモーティングにおいて、Formatterを利用してシリアル化を行うことができる
SkipVerification 第6回で解説したコードの検査(Verification)機能を無効にできる(この権限が付与された場合は、検証できないコードも実行できるようになる)
UnmanagedCode アンマネージ・コードを実行できる
SecurityPermissionFlag列挙体で定義されている権限

■System.ServiceProcess.ServiceControllerPermission

 Windows上で稼働しているサービス(デーモン)のコントローラにアクセスする権限を表す。このアクセス許可には、マシン名、サービス名と、そのアクセスを組み合わせて指定できる。PermissionEntriesプロパティに、ServiceControllerPermissionAccess列挙の値と、マシン名とサービス名を組み合わせて追加することができる。

■System.Net.SocketPermission

 System.Net.Sockets名前空間のクラスを使って、TCP/UDPのソケットを利用する権限を表す。このアクセス許可には、ホスト名、ポート番号、トランスポートの種類(TCPあるいはUDP)とアクセス(Accept、Connect)を組み合わせて指定できる。AddPermissionメソッドにこれらを指定して追加できる。

■System.Data.SqlClient.SqlClientPermission

 System.Data.SqlClient名前空間のクラスを利用して、SQL Serverにアクセスする権限を表す。このアクセス許可には、空のパスワードを許可するかどうかを設定することができる。

■System.Net.WebPermission

 System.Net名前空間のクラスを使って、Webアクセスを行う権限を表す。このアクセス許可には、WebサイトのURLとアクセスの組み合わせを指定できる。AddPermissionメソッドを使ってこれらを追加することもできる。

■System.Security.Permissions.UIPermission

 System.Windows.Forms名前空間などのクラスを利用して、ウィンドウに関する操作とクリップボードの操作を行う権限を表す。このアクセス許可には、どのような種類のウィンドウを表示するか、およびクリップボードへのアクセスを指定できる。

 以上のように、.NET Framework(共通言語ランタイム)から見て、外部のリソースにアクセスを行うような操作に対して、アクセス許可が定義されているのだ。アクセス許可は開発者が独自に作ることもできる。


 INDEX
  解説 インサイド .NET Framework [改訂版]
  第8回 コード・アクセス・セキュリティ(その3)
    1.コード・グループとメンバーシップ条件
    2.アクセス許可セットとは
  3.アクセス許可の一覧
    4.管理ツールによるセキュリティ・ポリシーの編集
    5.ポリシーの組み合わせ
 
インデックス・ページヘ  「解説:インサイド .NET Framework [改訂版]」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間