File.SetAccessControl(String, FileSecurity) Yöntem

Tanım

Bir nesne tarafından FileSecurity açıklanan erişim denetim listesi (ACL) girdilerini belirtilen dosyaya uygular.

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)

Parametreler

path
String

Erişim denetim listesi (ACL) girdilerinin ekleneceği veya kaldırılacağı dosya.

fileSecurity
FileSecurity

FileSecurity parametresi tarafından açıklanan dosyaya uygulanacak bir ACL girdisini path açıklayan nesne.

Özel durumlar

Dosyayı açarken bir G/Ç hatası oluştu.

path parametresidirnull.

Dosya bulunamadı.

path parametresi salt okunur bir dosya belirtti.

-veya-

Bu işlem geçerli platformda desteklenmiyor.

-veya-

path parametresi bir dizin belirtti.

-veya-

Çağıranın gerekli izni yok.

fileSecurity parametresidirnull.

Örnekler

Aşağıdaki kod örneği, bir dosyaya erişim denetim listesi (ACL) girdisi eklemek ve kaldırmak için ve SetAccessControl yöntemlerini kullanırGetAccessControl. Bu örneği çalıştırmak için geçerli bir kullanıcı veya grup hesabı sağlamanız gerekir.

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);
        }
    }
}
open System.IO
open System.Security.AccessControl

// Adds an ACL entry on the specified file for the specified account.
let addFileSecurity fileName (account: string) rights controlType =
    // Get a FileSecurity object that represents the
    // current security settings.
    let fSecurity = File.GetAccessControl fileName

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

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

// Removes an ACL entry on the specified file for the specified account.
let removeFileSecurity fileName (account: string) rights controlType =
    // Get a FileSecurity object that represents the
    // current security settings.
    let fSecurity = File.GetAccessControl fileName

    // Remove the FileSystemAccessRule from the security settings.
    fSecurity.RemoveAccessRule(FileSystemAccessRule(account, rights, controlType))
    |> ignore

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

let fileName = "test.xml"

printfn $"Adding access control entry for {fileName}"

// Add the access control entry to the file.
addFileSecurity fileName @"DomainName\AccountName" FileSystemRights.ReadData AccessControlType.Allow

printfn $"Removing access control entry from {fileName}"

// Remove the access control entry from the file.
removeFileSecurity fileName @"DomainName\AccountName" FileSystemRights.ReadData AccessControlType.Allow

printfn "Done."
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

Açıklamalar

yöntemi, SetAccessControl erişim denetim listesi (ACL) girdilerini, kaynağı olmayan ACL listesini temsil eden bir dosyaya uygular.

Dikkat

parametresi için fileSecurity belirtilen ACL, dosyanın mevcut ACL'sinin yerini alır. Yeni bir kullanıcının izinlerini eklemek için yöntemini kullanarak GetAccessControl mevcut ACL'yi alın, değiştirin ve sonra dosyaya geri uygulamak için kullanın SetAccessControl .

ACL, belirli bir dosya üzerinde belirli eylemlere sahip olan veya olmayan kişileri ve/veya grupları açıklar. Daha fazla bilgi için bkz. Nasıl yapılır: Access Control Listesi Girdilerini Ekleme veya Kaldırma.

SetAccessControl yöntemi yalnızca FileSecurity nesne oluşturulduktan sonra değiştirilmiş nesneleri kalıcı hale döndürür. Bir FileSecurity nesne değiştirilmediyse, bir dosyada kalıcı olmaz. Bu nedenle, bir dosyadan nesne almak ve aynı nesneyi başka bir FileSecurity dosyaya yeniden uygulamak mümkün değildir.

ACL bilgilerini bir dosyadan diğerine kopyalamak için:

  1. GetAccessControl Nesnesini kaynak dosyadan almak FileSecurity için yöntemini kullanın.

  2. Hedef dosya için yeni FileSecurity bir nesne İçerik Oluşturucu.

  3. GetSecurityDescriptorBinaryForm ACL bilgilerini almak için kaynak FileSecurity nesnenin veya GetSecurityDescriptorSddlForm yöntemini kullanın.

  4. SetSecurityDescriptorBinaryForm 3. adımda alınan bilgileri hedef FileSecurity nesneye kopyalamak için veya SetSecurityDescriptorSddlForm yöntemini kullanın.

  5. yöntemini kullanarak hedef FileSecurity nesneyi hedef dosyaya SetAccessControl ayarlayın.

NTFS ortamlarında ReadAttributes ve ReadExtendedAttributes kullanıcının üst klasörde hakları varsa kullanıcıya ListDirectory verilir. ve ReadExtendedAttributes'yi reddetmek ReadAttributes için üst dizinde reddedinListDirectory.

Şunlara uygulanır

Ayrıca bkz.