.NET Framework 2.0 コア機能解説 ~ 第 3 回 アクセス制御リスト (ACL) の追加と System.Security.AccessControl 名前空間 ~

中 博俊

MSMVP for C#

◆アクセス制御リスト (Accecc Control list) とは?

日頃から Windows を利用していると、ファイルやディレクトリのセキュリティタブは見慣れているのではないでしょうか。 (図 1)

article3.gif
( 図 1)


これは ACL (アクセス制御リスト) といい、 NTFS やレジストリのアクセス権や監査全般を管理しています。

ディレクトリやファイルの ACL では上位階層の設定を引き継いだり、許可を与えたり拒否したり、監査を行ったりと非常に広範な制御をすることが可能です。

ひとつサンプルを見てみましょう。

◆アクセス制御リストを利用したプログラムサンプル

=C#=============================================================
static void Main(string[] args)
{
    System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("c:\\");
    System.Security.AccessControl.DirectorySecurity ds = di.GetAccessControl();
    System.Security.AccessControl.AuthorizationRuleCollection arc = ds.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
    foreach (System.Security.AccessControl.FileSystemAccessRule ar in arc)
    {
        System.Console.WriteLine("{0}:{1}", ar.IdentityReference.Value, ar.FileSystemRights);
    }
}
=VB=============================================================
Sub Main()
    Dim di As New System.IO.DirectoryInfo("c:\ ")
 
    Dim ds As System.Security.AccessControl.DirectorySecurity = di.GetAccessControl()
    Dim arc As System.Security.AccessControl.AuthorizationRuleCollection = ds.GetAccessRules(True, True, GetType(System.Security.Principal.NTAccount))
    For Each ar As System.Security.AccessControl.FileSystemAccessRule In arc
        System.Console.WriteLine("{0}:{1}", ar.IdentityReference.Value, ar.FileSystemRights)
    Next
 
End Sub
=結果=============================================================
Everyone:ReadAndExecute, Synchronize
CREATOR OWNER:268435456
NT AUTHORITY\SYSTEM:FullControl
BUILTIN\Administrators:FullControl
BUILTIN\Users:AppendData
BUILTIN\Users:CreateFiles
BUILTIN\Users:ReadAndExecute, Synchronize
==============================================================

このサンプルプログラムは C:\ に設定されているアクセス権限の一覧を表示します。(環境により結果は異なりますので、エクスプローラのプロパティと見比べてみてください。)

この中で出てくる System.IO.DirectoryInfo は .NET Framework 1.0 からサポートされているディレクトリの各種情報を取得してくれるクラスです。

このクラスが.NET Framework 2.0 で拡張され、 GetAccessControl というメソッドが追加されています。
他にも System.IO.File や System.IO.FileStream そして Microsoft.Win32.RegistryKey などにも追加されています。それぞれ戻り値などは違いますので、MSDN ライブラリを確認してください。

◆AuthorizationRuleCollection の利用

サンプルプログラムでは次に DirectorySecurity の GetAccessRules から AuthorizationRuleCollection を取得しています。

このメソッドでは実際に取り出す AuthorizationRuleCollection に格納されるユーザ情報の識別子をどの型にするかを設定することができます。

ここで指定できるのは IdentityReference クラスを継承している、 NTAccount か、 SecurityIdentifier になります。今回は NTAccount を指定しています。

サンプルの残りの部分は 1 行ずつ表示処理を行っているだけです。

◆最後に

どうでしたか ? ACL に関しては複雑な技術で、何かの処理を行うにしても何段階もの手順を踏む必要があったりしますが .NET Framework 2.0 で追加された機能では非常に簡単に利用することが可能です。

ぜひ皆さんのプログラムでも ACL の機能を利用してみてください。

◆参考資料

表示: