アクセス制御リスト (ACL: Access Control List) 技術のアーキテクチャ
System.Security.AccessControl 名前空間は、Windows ACL セキュリティ システムの複雑さの大部分を抽象化する便利なクラスを介して、アクセス制御リスト (ACL) へのアクセスを提供します。 また、System.Security.AccessControl 名前空間には、Windows ACL セキュリティ システムへの高度なアクセスを提供する複数のクラスが含まれます。
.NET Framework では、次のリソースの ACL へのアクセスを提供しています。
暗号化キー
ディレクトリ
イベント待機ハンドル
Files
ミューテックス
レジストリ キー
セマフォ
これらの各リソースには、ACL の作成と変更に使用できる複数のクラスが含まれます。
ACL クラスの階層構造
ほとんどのシナリオについては、高度なクラスの代わりに、より高レベルの抽象化クラスを使用して ACL の作成と変更を行うことができます。 リソースごとに、より高レベルのクラスは次の形式になります。
随意アクセス制御リスト (DACL: Discretionary Access Control List) およびシステム アクセス制御リスト (SACL: System Access Control List) をカプセル化するクラス。 このクラスは、<Resource Name>Security という名前を使用します。 たとえば、FileSecurity クラスと DirectorySecurity クラスは、ファイルおよびフォルダーの DACL と SACL をカプセル化します。
アクセス制御エントリ (ACE: Access Control Entry) をカプセル化するクラス。 このクラスは、<Resource Name>AccessRule という名前を使用します。
監査 ACE をカプセル化するクラス。 このクラスは、<Resource Name>AuditRule という名前を使用します。
特定のアクセス規則と監査規則の作成を可能にする複数の列挙体。
すべての高レベルな ACL クラスの完全なリストについては、「アクセス制御リスト (ACL: Access Control List) の技術概要」を参照してください。
ACL への ACE の追加
アクセス規則クラスまたは監査規則クラスの 1 つを使用して ACE を作成した後は、リソースに規則を追加したり、ACE を使用してリソースから既存の規則を削除したりできます。 たとえば、FileSystemAccessRule クラスを使用して、管理者のみがファイルを開くことができることを指定する規則を作成できます。 次に、その規則を FileSecurity オブジェクトに追加したり、FileSecurity オブジェクトから類似する規則を削除したりすることもできます。
アクセスを付与する ACE を追加しても、プリンシパルにアクセス権が付与されるとか限りません。これは、拒否規則が常に許可規則より優先されるためです。 たとえば、システム アカウントに対してファイルへの許可アクセス規則を追加しても、そのファイルへのアクセスを別の規則によって拒否される可能性があるため、必ずしもアクセスきるとは限りません。
リソースに関連付けられている各 <Resource Name>Security オブジェクトは、アクセス規則および監査規則の追加と削除を行う次のメソッドを提供します。
メソッド |
説明 |
---|---|
AddAccessRule および AddAuditRule |
新しい規則にマージできるアクセス規則または監査規則を検索します。 見つからない場合は、新しい規則を追加します。 |
SetAccessRule |
指定した規則と同じユーザーおよび AccessControlType 値 (Allow または Deny) が設定されているすべてのアクセス制御規則を削除した後、指定した規則を追加します。 |
SetAuditRule |
AuditFlags 値に関係なく、指定した規則と同じユーザーが設定されているすべての監査規則を削除した後、指定した規則を追加します。 |
ResetAccessRule |
AccessControlType 値に関係なく、指定した規則と同じユーザーが設定されているすべてのアクセス制御規則を削除した後、指定した規則を追加します。 |
RemoveAccessRule |
指定した規則と同じユーザーおよび AccessControlType 値 (Allow または Deny) が設定され、さらに互換性のある継承フラグおよび反映フラグを持つアクセス制御規則を検索します。 見つかった場合、指定したアクセス規則に含まれている権限が規則から削除されます。 |
RemoveAuditRule |
指定した規則と同じユーザーが設定され、さらに互換性のある継承フラグおよび反映フラグを持つ監査制御規則を検索します。 見つかった場合、指定した規則に格納されている権限が規則から削除されます。 |
RemoveAccessRuleAll |
指定した規則と同じユーザーおよび AccessControlType 値 (Allow または Deny) が設定されているすべてのアクセス規則を検索し、見つかった場合はそれらの規則を削除します。 |
RemoveAuditRuleAll |
指定した規則と同じユーザーが設定されているすべての監査規則を検索し、見つかった場合はそれらの規則を削除します。 |
RemoveAccessRuleSpecific および RemoveAuditRuleSpecific |
指定した規則と完全に一致するアクセス規則または監査規則を検索し、見つかった場合はそれらの規則を削除します。 |
AddAccessRule および AddAuditRule |
新しい規則にマージできるアクセス規則または監査規則を検索します。 見つからない場合は、新しい規則を追加します。 |
ACL の取得および設定
保護された各リソースには、そのリソースに関連付けられている <Resource Name>Security オブジェクトを取得および設定するメソッドが含まれています。 特定のリソースの既存の ACL を取得するには、そのリソースに関連付けられている GetAccessControl メソッドの 1 つを使用します。 リソースに変更を反映させるには、そのリソースに関連付けられている SetAccesscontrol メソッドの 1 つを使用します。 set メソッドの 1 つを使用して変更を明示的に再適用するまで、その変更はリソースに反映されません。
保護された各リソースのすべての get メソッドと set メソッドの完全なリストについては、「アクセス制御リスト (ACL: Access Control List) の技術概要」を参照してください。