File.SetAccessControl(String, FileSecurity) File.SetAccessControl(String, FileSecurity) File.SetAccessControl(String, FileSecurity) Method

Definition

Wendet von einem FileSecurity-Objekt beschriebene Einträge von Zugriffssteuerungslisten (Access Control List, ACL) auf die angegebene Datei an.Applies access control list (ACL) entries described by a FileSecurity object to the specified file.

public:
 static void SetAccessControl(System::String ^ path, System::Security::AccessControl::FileSecurity ^ fileSecurity);
public static void SetAccessControl (string path, System.Security.AccessControl.FileSecurity fileSecurity);
static member SetAccessControl : string * System.Security.AccessControl.FileSecurity -> unit

Parameter

path
String String String

Eine Datei, der Einträge von Zugriffssteuerungslisten hinzugefügt oder aus dieser entfernt werden sollen.A file to add or remove access control list (ACL) entries from.

fileSecurity
FileSecurity FileSecurity FileSecurity

Ein FileSecurity-Objekt, das einen ACL-Eintrag beschreibt, der auf die vom path-Parameter beschriebene Datei angewendet werden soll.A FileSecurity object that describes an ACL entry to apply to the file described by the path parameter.

Ausnahmen

Beim Öffnen der Datei ist ein E/A-Fehler aufgetreten.An I/O error occurred while opening the file.

Der path-Parameter ist null.The path parameter is null.

Die Datei wurde nicht gefunden.The file could not be found.

Der path-Parameter hat eine schreibgeschützte Datei angegeben.The path parameter specified a file that is read-only.

- oder --or- Dieser Vorgang wird von der aktuellen Plattform nicht unterstützt.This operation is not supported on the current platform.

- oder --or- Der path-Parameter hat ein Verzeichnis angegeben.The path parameter specified a directory.

- oder --or- Der Aufrufer verfügt nicht über die erforderliche Berechtigung.The caller does not have the required permission.

Der fileSecurity-Parameter ist null.The fileSecurity parameter is null.

Beispiele

Im folgenden Codebeispiel wird die GetAccessControl und SetAccessControl Methoden zum Hinzufügen und entfernen Sie dann ein Eintrag der Zugriffssteuerungsliste (ACL) aus einer Datei zu steuern.The following code example uses the GetAccessControl and SetAccessControl methods to add and then remove an access control list (ACL) entry from a file. Sie müssen ein gültiges Benutzer- oder Gruppenkonto angeben, um dieses Beispiel auszuführen.You must supply a valid user or group account to run this example.

using namespace System;
using namespace System::IO;
using namespace System::Security::AccessControl;

// Adds an ACL entry on the specified file for the specified account.

void AddFileSecurity(String^ fileName, String^ account, 
                        FileSystemRights rights, AccessControlType controlType)
{
    // Get a FileSecurity object that represents the 
    // current security settings.
    FileSecurity^ fSecurity = File::GetAccessControl(fileName);

    // Add the FileSystemAccessRule to the security settings. 
    fSecurity->AddAccessRule(gcnew FileSystemAccessRule
                                   (account,rights, controlType));

    // Set the new access settings.
    File::SetAccessControl(fileName, fSecurity);
}

// Removes an ACL entry on the specified file for the specified account.

void RemoveFileSecurity(String^ fileName, String^ account, 
                        FileSystemRights rights, AccessControlType controlType)
{

    // Get a FileSecurity object that represents the 
    // current security settings.
    FileSecurity^ fSecurity = File::GetAccessControl(fileName);

    // Remove the FileSystemAccessRule from the security settings. 
    fSecurity->RemoveAccessRule(gcnew FileSystemAccessRule
                                      (account,rights, controlType));

    // Set the new access settings.
    File::SetAccessControl(fileName, fSecurity);
}

int main()
{
    try
    {
        String^ fileName = "test.xml";

        Console::WriteLine("Adding access control entry for " + fileName);

        // Add the access control entry to the file.
        AddFileSecurity(fileName, "MYDOMAIN\\MyAccount", 
            FileSystemRights::ReadData, AccessControlType::Allow);

        Console::WriteLine("Removing access control entry from " + fileName);

        // Remove the access control entry from the file.
        RemoveFileSecurity(fileName, "MYDOMAIN\\MyAccount", 
            FileSystemRights::ReadData, AccessControlType::Allow);

        Console::WriteLine("Done.");
    }
    catch (Exception^ ex)
    {
        Console::WriteLine(ex->Message);
    }
}

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

namespace FileSystemExample
{
    class FileExample
    {
        public static void Main()
        {
            try
            {
                string fileName = "test.xml";

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

                // Add the access control entry to the file.
                AddFileSecurity(fileName, @"DomainName\AccountName",
                    FileSystemRights.ReadData, AccessControlType.Allow);

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

                // Remove the access control entry from the file.
                RemoveFileSecurity(fileName, @"DomainName\AccountName",
                    FileSystemRights.ReadData, AccessControlType.Allow);

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

        // Adds an ACL entry on the specified file for the specified account.
        public static void AddFileSecurity(string fileName, string account,
            FileSystemRights rights, AccessControlType controlType)
        {


            // Get a FileSecurity object that represents the
            // current security settings.
            FileSecurity fSecurity = File.GetAccessControl(fileName);

            // Add the FileSystemAccessRule to the security settings.
            fSecurity.AddAccessRule(new FileSystemAccessRule(account,
                rights, controlType));

            // Set the new access settings.
            File.SetAccessControl(fileName, fSecurity);

        }

        // Removes an ACL entry on the specified file for the specified account.
        public static void RemoveFileSecurity(string fileName, string account,
            FileSystemRights rights, AccessControlType controlType)
        {

            // Get a FileSecurity object that represents the
            // current security settings.
            FileSecurity fSecurity = File.GetAccessControl(fileName);

            // Remove the FileSystemAccessRule from the security settings.
            fSecurity.RemoveAccessRule(new FileSystemAccessRule(account,
                rights, controlType));

            // Set the new access settings.
            File.SetAccessControl(fileName, fSecurity);

        }
    }
}
Imports System
Imports System.IO
Imports System.Security.AccessControl



Module FileExample

    Sub Main()
        Try
            Dim fileName As String = "test.xml"

            Console.WriteLine("Adding access control entry for " & fileName)

            ' Add the access control entry to the file.
            AddFileSecurity(fileName, "DomainName\AccountName", _
                FileSystemRights.ReadData, AccessControlType.Allow)

            Console.WriteLine("Removing access control entry from " & fileName)

            ' Remove the access control entry from the file.
            RemoveFileSecurity(fileName, "DomainName\AccountName", _
                FileSystemRights.ReadData, AccessControlType.Allow)

            Console.WriteLine("Done.")
        Catch e As Exception
            Console.WriteLine(e)
        End Try

    End Sub


    ' Adds an ACL entry on the specified file for the specified account.
    Sub AddFileSecurity(ByVal fileName As String, ByVal account As String, _
        ByVal rights As FileSystemRights, ByVal controlType As AccessControlType)
  
        ' Get a FileSecurity object that represents the 
        ' current security settings.
        Dim fSecurity As FileSecurity = File.GetAccessControl(fileName)

        ' Add the FileSystemAccessRule to the security settings. 
        Dim accessRule As FileSystemAccessRule = _
            New FileSystemAccessRule(account, rights, controlType)

        fSecurity.AddAccessRule(accessRule)

        ' Set the new access settings.
        File.SetAccessControl(fileName, fSecurity)

    End Sub


    ' Removes an ACL entry on the specified file for the specified account.
    Sub RemoveFileSecurity(ByVal fileName As String, ByVal account As String, _
        ByVal rights As FileSystemRights, ByVal controlType As AccessControlType)

        ' Get a FileSecurity object that represents the 
        ' current security settings.
        Dim fSecurity As FileSecurity = File.GetAccessControl(fileName)

        ' Remove the FileSystemAccessRule from the security settings. 
        fSecurity.RemoveAccessRule(New FileSystemAccessRule(account, _
            rights, controlType))

        ' Set the new access settings.
        File.SetAccessControl(fileName, fSecurity)

    End Sub
End Module

Hinweise

Die SetAccessControl Methode gilt Einträge Access Control List (ACL) für eine Datei, die nicht geerbte Zugriffssteuerungsliste darstellt.The SetAccessControl method applies access control list (ACL) entries to a file that represents the noninherited ACL list.

Achtung

Die ACL angegeben wird, für die fileSecurity Parameter ersetzt die vorhandene Zugriffssteuerungsliste für die Datei.The ACL specified for the fileSecurity parameter replaces the existing ACL for the file. Um Berechtigungen für einen neuen Benutzer hinzuzufügen, verwenden die GetAccessControl Methode zum Abrufen der vorhandenen ACL, ändern und dann SetAccessControl es wieder in die Datei angewendet.To add permissions for a new user, use the GetAccessControl method to obtain the existing ACL, modify it, and then use SetAccessControl to apply it back to the file.

Eine ACL beschreibt Personen bzw. Gruppen besitzen oder verfügen nicht über, Rechte für bestimmte Aktionen für die angegebene Datei.An ACL describes individuals and/or groups who have, or do not have, rights to specific actions on the given file. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen oder Entfernen von Zugriffssteuerungslisten-Einträgen.For more information, see How to: Add or Remove Access Control List Entries.

Die SetAccessControl -Methode behält nur FileSecurity Objekte, die nach der Erstellung geändert wurden.The SetAccessControl method persists only FileSecurity objects that have been modified after object creation. Wenn eine FileSecurity Objekt wurde nicht geändert wurde, wird nicht in einer Datei beibehalten werden.If a FileSecurity object has not been modified, it will not be persisted to a file. Aus diesem Grund ist es nicht möglich, zum Abrufen einer FileSecurity Objekt aus einer Datei, und wenden Sie das gleiche Objekt in eine andere Datei erneut an.Therefore, it is not possible to retrieve a FileSecurity object from one file and reapply the same object to another file.

ACL-Informationen aus einer Datei in ein anderes kopiert werden soll:To copy ACL information from one file to another:

  1. Verwenden der GetAccessControl Methode zum Abrufen der FileSecurity Objekt aus der Quelldatei.Use the GetAccessControl method to retrieve the FileSecurity object from the source file.

  2. Erstellen Sie ein neues FileSecurity Objekt für die Zieldatei.Create a new FileSecurity object for the destination file.

  3. Verwenden der GetSecurityDescriptorBinaryForm oder GetSecurityDescriptorSddlForm Methode der Quelle FileSecurity Objekt, das die ACL-Informationen abzurufen.Use the GetSecurityDescriptorBinaryForm or GetSecurityDescriptorSddlForm method of the source FileSecurity object to retrieve the ACL information.

  4. Verwenden der SetSecurityDescriptorBinaryForm oder SetSecurityDescriptorSddlForm Methode, um die Informationen zu kopieren, die in Schritt 3 in das Ziel abgerufenen FileSecurity Objekt.Use the SetSecurityDescriptorBinaryForm or SetSecurityDescriptorSddlForm method to copy the information retrieved in step 3 to the destination FileSecurity object.

  5. Legen Sie das Ziel FileSecurity Objekt, das die Ziel-Datei mithilfe der SetAccessControl Methode.Set the destination FileSecurity object to the destination file using the SetAccessControl method.

In Umgebungen mit NTFS ReadAttributes und ReadExtendedAttributes werden dem Benutzer erteilt, wenn der Benutzer hat ListDirectory Rechte für den übergeordneten Ordner.In NTFS environments, ReadAttributes and ReadExtendedAttributes are granted to the user if the user has ListDirectory rights on the parent folder. Verweigern ReadAttributes und ReadExtendedAttributes, Verweigern ListDirectory für das übergeordnete Verzeichnis.To deny ReadAttributes and ReadExtendedAttributes, deny ListDirectory on the parent directory.

Sicherheit

FileIOPermission
für die Berechtigung für den Dateizugriff.for permission to access the file. Security-Aktion: Bei Bedarf.Security action: Demand. Zugeordnete Enumerationen: NoAccess, ChangeAssociated enumerations: NoAccess, Change

Gilt für:

Siehe auch