File.SetAccessControl(String, FileSecurity) Metoda

Definicja

Stosuje wpisy listy kontroli dostępu (ACL) opisane przez FileSecurity obiekt do określonego pliku.

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
Public Shared Sub SetAccessControl (path As String, fileSecurity As FileSecurity)

Parametry

path
String

Plik do dodawania lub usuwania wpisów listy kontroli dostępu (ACL).

fileSecurity
FileSecurity

FileSecurity Obiekt opisujący wpis listy ACL, który ma być stosowany do pliku opisanego path przez parametr .

Wyjątki

Podczas otwierania pliku wystąpił błąd We/Wy.

Parametr path to null.

Nie można odnaleźć pliku.

Parametr path określił plik, który jest tylko do odczytu.

-lub- Ta operacja nie jest obsługiwana na bieżącej platformie.

-lub- Parametr path określił katalog.

-lub- Obiekt wywołujący nie posiada wymaganych uprawnień.

Parametr fileSecurity to null.

Przykłady

Poniższy przykład kodu używa GetAccessControl metod i SetAccessControl do dodawania, a następnie usuwania wpisu listy kontroli dostępu (ACL) z pliku. Aby uruchomić ten przykład, musisz podać prawidłowe konto użytkownika lub grupy.

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.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

Uwagi

Metoda SetAccessControl stosuje wpisy listy kontroli dostępu (ACL) do pliku, który reprezentuje nieheritowaną listę listy ACL.

Przestroga

Lista ACL określona dla parametru fileSecurity zastępuje istniejącą listę ACL pliku. Aby dodać uprawnienia dla nowego użytkownika, użyj GetAccessControl metody w celu uzyskania istniejącej listy ACL, zmodyfikuj ją, a następnie użyj SetAccessControl polecenia , aby zastosować ją z powrotem do pliku.

Lista ACL opisuje osoby i/lub grupy, które mają lub nie mają praw do określonych akcji w danym pliku. Aby uzyskać więcej informacji, zobacz How to: Add or Remove 存取控制 List Entries (Jak dodać lub usunąć wpisy listy 存取控制).

Metoda SetAccessControl utrzymuje tylko FileSecurity obiekty, które zostały zmodyfikowane po utworzeniu obiektu. FileSecurity Jeśli obiekt nie został zmodyfikowany, nie będzie on utrwalany w pliku. W związku z tym nie można pobrać FileSecurity obiektu z jednego pliku i ponownie zastosować ten sam obiekt do innego pliku.

Aby skopiować informacje listy ACL z jednego pliku do innego:

  1. GetAccessControl Użyj metody , aby pobrać FileSecurity obiekt z pliku źródłowego.

  2. Utwórz nowy FileSecurity obiekt dla pliku docelowego.

  3. GetSecurityDescriptorBinaryForm Użyj metody lub GetSecurityDescriptorSddlForm obiektu źródłowegoFileSecurity, aby pobrać informacje o listach ACL.

  4. SetSecurityDescriptorBinaryForm Użyj metody orSetSecurityDescriptorSddlForm, aby skopiować informacje pobrane w kroku 3 do obiektu docelowegoFileSecurity.

  5. Ustaw obiekt docelowy na plik docelowy FileSecurity przy użyciu SetAccessControl metody .

W środowiskach NTFS i ReadExtendedAttributes są przyznawane użytkownikowi, ReadAttributes jeśli użytkownik ma ListDirectory prawa do folderu nadrzędnego. Aby odmówić i ReadExtendedAttributes, odmów ReadAttributes ListDirectory w katalogu nadrzędnym.

Dotyczy

Zobacz też