エクスポート (0) 印刷
すべて展開
この記事は翻訳者によって翻訳されたものです。 記事の文章にポインターを重ねると、原文のテキストが表示されます。
訳文
原文

Directory.SetAccessControl メソッド

DirectorySecurity オブジェクトが示すアクセス制御リスト (ACL: Access Control List) エントリを、指定したディレクトリに適用します。

名前空間:  System.IO
アセンブリ:  mscorlib (mscorlib.dll 内)

public static void SetAccessControl(
	string path,
	DirectorySecurity directorySecurity
)

パラメーター

path
型: System.String
アクセス制御リスト (ACL) エントリの追加先または削除元となるディレクトリ。
directorySecurity
型: System.Security.AccessControl.DirectorySecurity
path パラメーターが示すディレクトリに適用する ACL エントリを表す DirectorySecurity オブジェクト。

例外条件
ArgumentNullException

directorySecurity パラメーターが null です。

DirectoryNotFoundException

ディレクトリが見つかりませんでした。

ArgumentException

path が無効でした。

UnauthorizedAccessException

現在のプロセスには、path によって指定されたディレクトリにアクセスするために必要なアクセス権がありません。

または

現在のプロセスに ACL エントリを設定するための十分な特権がありません。

PlatformNotSupportedException

現在のオペレーティング システムは Windows 2000 以降ではありません。

SetAccessControl メソッドは、非継承 ACL リストを表すファイルにアクセス制御リスト (ACL) エントリを適用します。

Caution メモ注意

ディレクトリの既存の ACL が、directorySecurity パラメーターで指定された ACL に置き換えられます。 新しいユーザーのアクセス許可を追加するには、GetAccessControl メソッドを使用して既存の ACL を取得し、これを変更します。

ACL は、指定したファイルまたはディレクトリ上での特定のアクションに対して権限を持つ (または持たない) 個人およびグループ、またはそのいずれかを示します。 詳細については、「アクセス制御リスト (ACL: Access Control List) 技術の概要」および「方法 : アクセス制御リスト エントリを追加または削除する」を参照してください。

SetAccessControl メソッドでは、作成後に変更された DirectorySecurity オブジェクトのみが保持されます。DirectorySecurity オブジェクトが変更されていない場合は、ファイルに保持されません。したがって、ファイルから DirectorySecurity オブジェクトを取得して、同じオブジェクトを別のファイルに適用することはできません。

ファイルからファイルに ACL 情報をコピーするには、次の操作を実行します。

  1. GetAccessControl メソッドを使用して、DirectorySecurity オブジェクトをソース ファイルから取得します。

  2. コピー先のファイルに新しい DirectorySecurity オブジェクトを作成します。

  3. コピー元となる DirectorySecurity オブジェクトの GetSecurityDescriptorBinaryForm メソッドまたは GetSecurityDescriptorSddlForm メソッドを使用して、ACL 情報を取得します。

  4. SetSecurityDescriptorBinaryForm メソッドまたは SetSecurityDescriptorSddlForm メソッドを使用して、手順 3 で取得した情報をコピー先の DirectorySecurity オブジェクトにコピーします。

  5. SetAccessControl メソッドを使用して、コピー先の DirectorySecurity オブジェクトをコピー先のファイルに設定します。

NTFS 環境では、ユーザーが親フォルダーに対して ListDirectory 権限を持っている場合、ReadAttributes および ReadExtendedAttributes がそのユーザーに付与されます。 ReadAttributes および ReadExtendedAttributes を拒否するには、親ディレクトリで ListDirectory を拒否します。

GetAccessControl メソッドおよび SetAccessControl メソッドを使用して、ディレクトリにアクセス制御リスト (ACL) エントリを追加し、次にディレクトリから ACL エントリを削除するコード例を次に示します。 この例を実行するには、有効なユーザー アカウントまたはグループ アカウントを指定する必要があります。


using System;
using System.IO;
using System.Security.AccessControl;

namespace FileSystemExample
{
    class DirectoryExample
    {
        public static void Main()
        {
            try
            {
                string DirectoryName = "TestDirectory";

                Console.WriteLine("Adding access control entry for " + DirectoryName);

                // Add the access control entry to the directory.
                AddDirectorySecurity(DirectoryName, @"MYDOMAIN\MyAccount", FileSystemRights.ReadData, AccessControlType.Allow);

                Console.WriteLine("Removing access control entry from " + DirectoryName);

                // Remove the access control entry from the directory.
                RemoveDirectorySecurity(DirectoryName, @"MYDOMAIN\MyAccount", FileSystemRights.ReadData, AccessControlType.Allow);

                Console.WriteLine("Done.");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            Console.ReadLine();
        }

        // Adds an ACL entry on the specified directory for the specified account.
        public static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
        {
            // Create a new DirectoryInfo object.
            DirectoryInfo dInfo = new DirectoryInfo(FileName);

            // Get a DirectorySecurity object that represents the 
            // current security settings.
            DirectorySecurity dSecurity = dInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings. 
            dSecurity.AddAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            dInfo.SetAccessControl(dSecurity);

        }

        // Removes an ACL entry on the specified directory for the specified account.
        public static void RemoveDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
        {
            // Create a new DirectoryInfo object.
            DirectoryInfo dInfo = new DirectoryInfo(FileName);

            // Get a DirectorySecurity object that represents the 
            // current security settings.
            DirectorySecurity dSecurity = dInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings. 
            dSecurity.RemoveAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            dInfo.SetAccessControl(dSecurity);

        }
    }
}



.NET Framework

サポート対象: 4、3.5、3.0、2.0

.NET Framework Client Profile

サポート対象: 4、3.5 SP1

  • FileIOPermission 

    (ディレクトリのアクセス制御リスト (ACL) を列挙するために必要なアクセス許可)。 関連する列挙体 : NoAccessView

    Demand (セキュリティ アクション)。

Windows 7, Windows Vista SP1 以降, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core はサポート対象外), Windows Server 2008 R2 (SP1 以降で Server Core をサポート), Windows Server 2003 SP2

.NET Framework では、各プラットフォームのすべてのバージョンはサポートしていません。 サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

コミュニティの追加

追加
表示:
© 2014 Microsoft