解説インサイド .NET Framework第11回 コード・アクセス・セキュリティ(その3) インフォテリア株式会社 |
アクセス許可
上記の手順で、エビデンスを変化させながらアクセス許可セットの中身を列挙していけば、アクセス許可セットにどんなアクセス許可が含まれているのかが分かる。だが、アクセス許可の具体的な内容が分からなければ、何が含まれているかを知っても無意味なので、ここからは、.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 | 第9回で解説したコードの検査(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 | ||
第11回 コード・アクセス・セキュリティ(その3) | ||
1.コード・グループとメンバーシップ条件 | ||
2.アクセス許可セットとは | ||
3.アクセス許可の一覧 | ||
4.管理ツールによるセキュリティ・ポリシーの編集 | ||
5.ポリシーの組み合わせ | ||
「解説:インサイド .NET Framework 」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|