アクセス制御リスト (ACL: Access Control List) の技術概要

ここでは、随意アクセス制御リスト (DACL: Discretionary Access Control List)、システム アクセス制御リスト (SACL: System Access Control List)、およびアクセス制御エントリ (ACE: Access Control Entry) のマネージ API について概説します。.NET Framework Version 2.0 以降では、System.Security.AccessControl 名前空間のクラスを使用して、複数の種類の保護されたリソースの DACL、SACL、および ACE にプログラムでアクセスできます。

マネージ ACL API を使用すると、多くの詳細を自動的に管理する複数のクラスが提供されるため、アンマネージ実装より簡単に ACL を操作できます。たとえば、マネージ実装では null の DACL を作成できないようになっているため、ACE を誤った順序で配列することによって偶然にセキュリティ上危険な DACL を作成してしまう心配がありません。

キーワード

アクセス制御リスト (ACL)、随意アクセス制御リスト (DACL)、システム アクセス制御リスト (SACL)、アクセス制御エントリ (ACE)、監査 ACE

名前空間

System.Security.AccessControl

関連技術

.NET Framework におけるセキュリティ

背景

ACL と省略されることがある、随意アクセス制御リスト (DACL) は、ファイルやフォルダーなどのリソースを保護するために Microsoft Windows NT 以降で使用される機構です。DACL には、リソースの使用を管理する規則にプリンシパル (通常はユーザー アカウントまたはアカウントのグループ) を関連付ける、複数のアクセス制御エントリ (ACE) が含まれます。DACL と ACE を使用すると、ユーザー アカウントに関連付けることのできるアクセス許可に基づいて、リソースに対する権限を許可または拒否できます。たとえば、ACE を作成してファイルの DACL に適用することにより、管理者以外はそのファイルの読み取りを行うことができないようにすることもできます。

監査 ACE とも呼ばれる、システム アクセス制御リスト (SACL) は、リソースに関連付けられている監査メッセージを制御する機構です。DACL と同様に、SACL にも指定したリソースの監査規則を定義する ACE が含まれます。監査 ACE を使用すると、リソースへの成功または失敗したアクセス試行を記録できますが、リソースを使用できるアカウントの管理を行わない点がアクセス ACE とは異なります。たとえば、ACE を作成してファイルの SACL に適用することにより、そのファイルを開くことに成功したすべての試行をログに記録できます。

ACL クラスの概要

いくつかの技術領域の ACL を簡単に作成および変更するために使用できる主要なクラスを次の表に示します。これは、System.Security.AccessControl 名前空間をすべてまとめた一覧ではなく、ACL を利用する場合に使用する必要のある主要なクラスの一覧です。

技術領域

クラス

暗号化キー

CryptoKeySecurity

CryptoKeyAccessRule

CryptoKeyAuditRule

ディレクトリ

DirectorySecurity

FileSystemAccessRule

FileSystemAuditRule

イベント待機ハンドル

EventWaitHandleSecurity

EventWaitHandleAccessRule

EventWaitHandleAuditRule

ファイル

FileSecurity

FileSystemAccessRule

FileSystemAuditRule

ミューテックス

MutexSecurity

MutexAccessRule

MutexAuditRule

レジストリ キー

RegistrySecurity

RegistryAccessRule

RegistryAuditRule

セマフォ

SemaphoreSecurity

SemaphoreAccessRule

SemaphoreAuditRule

リソースの既存の ACL 情報を問い合わせる場合、または変更した ACL 情報をリソースに適用する場合は、既存のリソースの ACL へのアクセスを提供する複数のメソッドのうちの 1 つを使用する必要があります。上の表のクラスは、ACL を構築および編集するメソッドを提供しますが、ACL の問い合わせや適用を行う方法は提供しません。

すべてのリソースには、リソースの作成時に ACL を適用する関連メソッド (通常はコンストラクターのオーバーロード) が含まれています。これらのメソッドを使用すると、既存のリソースの ACL を取得したり、ACL を既存のリソースに適用したりできます。

各技術領域の ACL の取得や設定を行うために使用するメソッドを次の表に示します。これらのメソッドは、System.Security.AccessControl 名前空間以外の複数の名前空間に配置されており、特定のリソースを表す高レベル クラスの一部を構成しています。たとえば、指定したディレクトリの ACL を問い合わせるには、Directory.GetAccessControl メソッドを使用して、ディレクトリの DACL および SACL をカプセル化する DirectorySecurity オブジェクトを取得します。ファイルやディレクトリなどの一部のリソースは、ACL へのアクセスを提供する、異なるクラスに含まれる複数の等価なメソッドを備えています。

技術領域

ACL の取得および設定を行うメソッド

暗号化キー

CspParameters.CryptoKeySecurity

CspParameters.CspParameters

CspParameters.CspParameters

CspKeyContainerInfo.CryptoKeySecurity

ディレクトリ

Directory.GetAccessControl

Directory.SetAccessControl

DirectoryInfo.GetAccessControl

DirectoryInfo.SetAccessControl

DirectoryInfo.Create

イベント待機ハンドル

EventWaitHandle.GetAccessControl

EventWaitHandle.SetAccessControl

EventWaitHandle.EventWaitHandle

ファイル

FileStream.GetAccessControl

FileStream.SetAccessControl

FileStream.FileStream

File.GetAccessControl

File.SetAccessControl

File.Create

FileInfo.GetAccessControl

FileInfo.SetAccessControl

ミューテックス

Mutex.GetAccessControl

Mutex.SetAccessControl

Mutex.Mutex

レジストリ キー

RegistryKey.GetAccessControl

RegistryKey.SetAccessControl

RegistryKey.CreateSubKey

セマフォ

Semaphore.GetAccessControl

Semaphore.SetAccessControl

Semaphore.Semaphore

参照

その他の技術情報

アクセス制御リスト (ACL: Access Control List) 技術の概要

.NET Framework におけるセキュリティ