Freigeben über


Verwenden von .NET zum Verwalten von Zugriffssteuerungslisten in Azure Data Lake Storage

In diesem Artikel erfahren Sie, wie Sie mithilfe von .NET die Zugriffssteuerungslisten von Verzeichnissen und Dateien abrufen, festlegen und aktualisieren.

Die Vererbung von Zugriffssteuerungslisten (ACLs) ist für neue untergeordnete Elemente, die unter einem übergeordneten Verzeichnis erstellt werden, bereits verfügbar. Sie können Zugriffssteuerungslisten aber auch rekursiv für die vorhandenen untergeordneten Elemente eines übergeordneten Verzeichnisses hinzufügen, aktualisieren und entfernen, ohne diese Änderungen für jedes untergeordnete Element einzeln vornehmen zu müssen.

NuGet-Paket | Beispiele | API-Referenz | Zuordnung von Gen1 zu Gen2 | Feedback geben

Voraussetzungen

  • Azure-Abonnement – Erstellen eines kostenlosen Kontos
  • Ein Azure-Speicherkonto, für das hierarchischer Namespace (HNS) aktiviert ist. Befolgen Sie diese Anleitung für die Erstellung.
  • Azure CLI, Version 2.6.0 oder höher.
  • Eine der folgenden Sicherheitsberechtigungen:
    • Ein bereitgestellter Sicherheitsprinzipal für Microsoft Entra ID, dem die Rolle Storage Blob-Datenbesitzer im Bereich des Zielcontainers, der übergeordneten Ressourcengruppe oder des Abonnements zugewiesen wurde.
    • Der Benutzer muss Besitzer des Zielcontainers oder -verzeichnisses sein, in dem Sie die ACL-Einstellungen anwenden möchten. Beim rekursiven Festlegen von ACLs schließt dies alle untergeordneten Elemente im Zielcontainer oder -verzeichnis ein.
    • Speicherkontoschlüssel

Einrichten des Projekts

Dieser Abschnitt zeigt Ihnen, wie Sie ein Projekt für die Arbeit mit der Azure Storage Data Lake-Clientbibliothek einrichten.

Installieren von Paketen

Installieren Sie aus Ihrem Projektverzeichnis mithilfe des Befehls dotnet add package die Pakete für die Azure Storage Data Lake- und Azure Identity-Clientbibliotheken. Für kennwortlose Verbindungen mit Azure-Diensten wird das Azure.Identity-Paket benötigt.

dotnet add package Azure.Storage.Files.DataLake
dotnet add package Azure.Identity

Fügen Sie Anweisungen vom Typ using hinzu.

Fügen Sie diese using-Anweisungen am Anfang der Codedatei hinzu:

using Azure;
using Azure.Core;
using Azure.Storage;
using Azure.Storage.Files.DataLake;
using Azure.Storage.Files.DataLake.Models;
using System.Collections.Generic;
using System.Threading.Tasks;

Herstellen einer Verbindung mit dem Konto

Um die Codebeispiele in diesem Artikel auszuführen, müssen Sie eine DataLakeServiceClient-Instanz erstellen, die das Speicherkonto darstellt. Sie können das Clientobjekt mit Microsoft Entra ID-Anmeldeinformationen oder mit einem Kontoschlüssel autorisieren.

Sie können die Azure-Identitätsclientbibliothek für .NET verwenden, um Ihre Anwendung bei Microsoft Entra ID zu authentifizieren.

Hinweis

Wenn Sie Microsoft Entra ID verwenden, um den Zugriff zu autorisieren, sollten Sie sicherstellen, dass Ihrem Sicherheitsprinzipal die Rolle Besitzer von Speicherblobdaten zugewiesen wurde. Weitere Informationen dazu, wie ACL-Berechtigungen angewendet werden und wie sich Änderungen daran auswirken, finden Sie unter Zugriffssteuerungsmodell in Azure Data Lake Storage.

Weisen Sie Ihrem Sicherheitsprinzipal als erstes eine der folgenden Rollen von Azure RBAC (Azure Role-Based Access Control) zu:

Role ACL-Einstellungsfunktion
Besitzer von Speicherblobdaten Alle Verzeichnisse und Dateien im Konto
Mitwirkender an Speicherblobdaten Nur Verzeichnisse und Dateien im Besitz des Sicherheitsprinzipals

Erstellen Sie als Nächstes eine DataLakeServiceClient-Instanz und übergeben Sie eine neue Instanz der DefaultAzureCredential-Klasse.

public static DataLakeServiceClient GetDataLakeServiceClient(string accountName)
{
    string dfsUri = $"https://{accountName}.dfs.core.windows.net";

    DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClient(
        new Uri(dfsUri),
        new DefaultAzureCredential());

    return dataLakeServiceClient;
}

Weitere Informationen zur Verwendung von DefaultAzureCredential zum Autorisieren des Datenzugriffs finden Sie unter Authentifizieren von .NET-Anwendungen mit Azure-Diensten.

Festlegen von ACLs

Wenn Sie eine neue Zugriffssteuerungsliste (ACL) festlegen, ersetzen Sie die gesamte bestehende Zugriffssteuerungsliste einschließlich aller Einträge. Wenn Sie die Berechtigungsebene eines Sicherheitsprinzipals ändern oder der Zugriffssteuerungsliste einen neuen Sicherheitsprinzipal hinzufügen möchten, ohne dass sich dies auf bereits vorhandene Einträge auswirkt, sollten Sie die Zugriffssteuerungsliste stattdessen aktualisieren. Informationen dazu, wie eine Zugriffssteuerungsliste aktualisiert statt ersetzt wird, finden Sie im Abschnitt Aktualisieren von ACLs in diesem Artikel.

Wenn Sie die Zugriffssteuerungsliste festlegen, müssen Sie einen Eintrag für den besitzenden Benutzer, einen Eintrag für die besitzende Gruppe und einen Eintrag für alle anderen Benutzer hinzufügen. Weitere Informationen zum besitzenden Benutzer, zur besitzenden Gruppe und zu allen anderen Benutzern finden Sie unter Benutzer und Identitäten.

In diesem Abschnitt erfahren Sie Folgendes:

  • Festlegen der ACL eines Verzeichnisses
  • Festlegen der ACL einer Datei
  • Rekursives Festlegen von ACLs

Festlegen der ACL eines Verzeichnisses

Rufen Sie die Zugriffssteuerungsliste (Access Control List, ACL) eines Verzeichnisses ab, indem Sie die Methode DataLakeDirectoryClient.GetAccessControlAsync aufrufen, und legen Sie die ACL durch Aufrufen der Methode DataLakeDirectoryClient.SetAccessControlList fest.

In diesem Beispiel wird die ACL des Verzeichnisses my-directory abgerufen und dann festgelegt. Mit der Zeichenfolge user::rwx,group::r-x,other::rw- werden dem zuständigen Benutzer Lese-, Schreib- und Ausführungsberechtigungen und der zuständigen Gruppe nur Lese- und Ausführungsberechtigungen gewährt, während allen anderen lediglich Lese- und Schreibzugriff gewährt wird.

public async Task ManageDirectoryACLs(DataLakeFileSystemClient fileSystemClient)
{
    DataLakeDirectoryClient directoryClient =
      fileSystemClient.GetDirectoryClient("");

    PathAccessControl directoryAccessControl =
        await directoryClient.GetAccessControlAsync();

    foreach (var item in directoryAccessControl.AccessControlList)
    {
        Console.WriteLine(item.ToString());
    }

    IList<PathAccessControlItem> accessControlList
        = PathAccessControlExtensions.ParseAccessControlList
        ("user::rwx,group::r-x,other::rw-");

    directoryClient.SetAccessControlList(accessControlList);

}

Sie können auch die ACL des Stammverzeichnisses eines Containers abrufen und festlegen. Übergeben Sie zum Abrufen des Stammverzeichnisses eine leere Zeichenfolge ("") an die Methode DataLakeFileSystemClient.GetDirectoryClient.

Festlegen der ACL einer Datei

Rufen Sie die Zugriffssteuerungsliste (Access Control List, ACL) einer Datei ab, indem Sie die Methode DataLakeFileClient.GetAccessControlAsync aufrufen, und legen Sie die ACL durch Aufrufen der Methode DataLakeFileClient.SetAccessControlList fest.

Im folgenden Beispiel wird die ACL der Datei my-file.txt abgerufen und dann festgelegt. Mit der Zeichenfolge user::rwx,group::r-x,other::rw- werden dem zuständigen Benutzer Lese-, Schreib- und Ausführungsberechtigungen und der zuständigen Gruppe nur Lese- und Ausführungsberechtigungen gewährt, während allen anderen lediglich Lese- und Schreibzugriff gewährt wird.

public async Task ManageFileACLs(DataLakeFileSystemClient fileSystemClient)
{
    DataLakeDirectoryClient directoryClient =
        fileSystemClient.GetDirectoryClient("my-directory");

    DataLakeFileClient fileClient =
        directoryClient.GetFileClient("hello.txt");

    PathAccessControl FileAccessControl =
        await fileClient.GetAccessControlAsync();

    foreach (var item in FileAccessControl.AccessControlList)
    {
        Console.WriteLine(item.ToString());
    }

    IList<PathAccessControlItem> accessControlList
        = PathAccessControlExtensions.ParseAccessControlList
        ("user::rwx,group::r-x,other::rw-");

    fileClient.SetAccessControlList(accessControlList);
}

Rekursives Festlegen von ACLs

Sie legen Zugriffssteuerungslisten rekursiv fest, indem Sie die DataLakeDirectoryClient.SetAccessControlRecursiveAsync-Methode aufrufen. Übergeben Sie dieser Methode eine Liste der PathAccessControlItem. Jedes PathAccessControlItem-Element definiert einen ACL-Eintrag.

Wenn Sie einen standardmäßigen ACL-Eintrag festlegen möchten, dann können Sie die Eigenschaft PathAccessControlItem.DefaultScope der Eigenschaft PathAccessControlItem auf true festlegen.

In diesem Beispiel wird die ACL des Verzeichnisses my-parent-directory festgelegt. Diese Methode akzeptiert einen booleschen Parameter namens isDefaultScope, der angibt, ob die Standard-ACL festgelegt werden soll. Dieser Parameter wird im Konstruktor von PathAccessControlItem verwendet. Mit den Einträgen der ACL werden dem zuständigen Benutzer Lese-, Schreib- und Ausführungsberechtigungen und der zuständigen Gruppe nur Lese- und Ausführungsberechtigungen gewährt, während allen anderen kein Zugriff gewährt wird. Der letzte ACL-Eintrag in diesem Beispiel gewährt einem bestimmten Benutzer mit der Objekt-ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Lese- und Ausführungsberechtigungen.

    public async Task SetACLRecursively(DataLakeServiceClient serviceClient, bool isDefaultScope)
{
    DataLakeDirectoryClient directoryClient =
        serviceClient.GetFileSystemClient("my-container").
            GetDirectoryClient("my-parent-directory");

    List<PathAccessControlItem> accessControlList =
        new List<PathAccessControlItem>()
    {
new PathAccessControlItem(AccessControlType.User,
    RolePermissions.Read |
    RolePermissions.Write |
    RolePermissions.Execute, isDefaultScope),

new PathAccessControlItem(AccessControlType.Group,
    RolePermissions.Read |
    RolePermissions.Execute, isDefaultScope),

new PathAccessControlItem(AccessControlType.Other,
    RolePermissions.None, isDefaultScope),

new PathAccessControlItem(AccessControlType.User,
    RolePermissions.Read |
    RolePermissions.Execute, isDefaultScope,
    entityId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"),
    };

    await directoryClient.SetAccessControlRecursiveAsync
        (accessControlList, null);
}

Aktualisieren von ACLs

Wenn Sie eine Zugriffssteuerungsliste aktualisieren, ändern Sie die Zugriffssteuerungsliste, anstatt sie zu ersetzen. Beispielsweise können Sie der Zugriffssteuerungsliste einen neuen Sicherheitsprinzipal hinzufügen, ohne dass sich dies auf andere Sicherheitsprinzipale auswirkt, die in der Zugriffssteuerungsliste aufgelistet sind. Informationen dazu, wie eine Zugriffssteuerungsliste ersetzt statt aktualisiert wird, finden Sie im Abschnitt Festlegen von Zugriffssteuerungslisten in diesem Artikel.

In diesem Abschnitt erfahren Sie Folgendes:

  • Aktualisieren einer Zugriffssteuerungsliste (ACL)
  • Rekursives Aktualisieren von Zugriffssteuerungslisten

Aktualisieren einer Zugriffssteuerungsliste (ACL)

Rufen Sie zuerst die Zugriffssteuerungsliste eines Verzeichnisses ab, indem Sie die DataLakeDirectoryClient.GetAccessControlAsync-Methode aufrufen. Kopieren Sie die Liste der ACL-Einträge in eine neue Liste von PathAccessControl-Objekten. Suchen Sie dann den Eintrag, den Sie aktualisieren möchten, und ersetzen Sie ihn in der Liste. Legen Sie die Zugriffssteuerungsliste fest, indem Sie die DataLakeDirectoryClient.SetAccessControlList-Methode aufrufen.

In diesem Beispiel wird die Stamm-ACL eines Containers aktualisiert, indem der ACL-Eintrag für alle anderen Benutzer ersetzt wird.

public async Task UpdateDirectoryACLs(DataLakeFileSystemClient fileSystemClient)
{
    DataLakeDirectoryClient directoryClient =
      fileSystemClient.GetDirectoryClient("");

    PathAccessControl directoryAccessControl =
        await directoryClient.GetAccessControlAsync();

    List<PathAccessControlItem> accessControlListUpdate 
        = (List<PathAccessControlItem>)directoryAccessControl.AccessControlList;

    int index = -1;

    foreach (var item in accessControlListUpdate)
    {
        if (item.AccessControlType == AccessControlType.Other)
        {
            index = accessControlListUpdate.IndexOf(item);
            break;
        }
    }

    if (index > -1)
    {
        accessControlListUpdate[index] = new PathAccessControlItem(AccessControlType.Other,
        RolePermissions.Read |
        RolePermissions.Execute);

        directoryClient.SetAccessControlList(accessControlListUpdate);
    }

   }

Rekursives Aktualisieren von Zugriffssteuerungslisten

Um eine Zugriffssteuerungsliste rekursiv zu aktualisieren, erstellen Sie ein neues ACL-Objekt mit dem ACL-Eintrag, den Sie aktualisieren möchten, und verwenden Sie dieses Objekt dann im Aktualisierungsvorgang der Zugriffssteuerungsliste. Rufen Sie nicht die vorhandene ACL ab, stellen Sie lediglich die zu aktualisierenden Einträge für die ACL bereit.

Sie aktualisieren eine Zugriffssteuerungsliste rekursiv, indem Sie die DataLakeDirectoryClient.UpdateAccessControlRecursiveAsync-Methode aufrufen. Übergeben Sie dieser Methode eine Liste der PathAccessControlItem. Jedes PathAccessControlItem-Element definiert einen ACL-Eintrag.

Wenn Sie einen standardmäßigen ACL-Eintrag aktualisieren möchten, dann können Sie die Eigenschaft PathAccessControlItem.DefaultScope der Eigenschaft PathAccessControlItem auf true festlegen.

Dieses Beispiel aktualisiert einen ACL-Eintrag mit Schreibberechtigung. Diese Methode akzeptiert einen booleschen Parameter namens isDefaultScope, der angibt, ob die Standard-ACL aktualisiert werden soll. Dieser Parameter wird im Konstruktor von PathAccessControlItem verwendet.

public async Task UpdateACLsRecursively(DataLakeServiceClient serviceClient, bool isDefaultScope)
{
    DataLakeDirectoryClient directoryClient =
        serviceClient.GetFileSystemClient("my-container").
        GetDirectoryClient("my-parent-directory");

    List<PathAccessControlItem> accessControlListUpdate =
        new List<PathAccessControlItem>()
    {
new PathAccessControlItem(AccessControlType.User,
    RolePermissions.Read |
    RolePermissions.Write |
    RolePermissions.Execute, isDefaultScope,
    entityId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"),
    };

    await directoryClient.UpdateAccessControlRecursiveAsync
        (accessControlListUpdate, null);

}

Entfernen von ACL-Einträgen

Sie können einen oder mehrere ACL-Einträge entfernen. In diesem Abschnitt erfahren Sie Folgendes:

  • Entfernen eines ACL-Eintrags
  • Rekursives Entfernen von ACL-Einträgen

Entfernen eines ACL-Eintrags

Rufen Sie zuerst die Zugriffssteuerungsliste eines Verzeichnisses ab, indem Sie die DataLakeDirectoryClient.GetAccessControlAsync-Methode aufrufen. Kopieren Sie die Liste der ACL-Einträge in eine neue Liste von PathAccessControl-Objekten. Suchen Sie anschließend den Eintrag, den Sie entfernen möchten, und rufen Sie die Remove-Methode der Auflistung auf. Legen Sie die aktualisierte Zugriffssteuerungsliste fest, indem Sie die DataLakeDirectoryClient.SetAccessControlList-Methode aufrufen.

In diesem Beispiel wird die Stamm-ACL eines Containers aktualisiert, indem der ACL-Eintrag für alle anderen Benutzer ersetzt wird.

public async Task RemoveDirectoryACLEntry
    (DataLakeFileSystemClient fileSystemClient)
{
    DataLakeDirectoryClient directoryClient =
      fileSystemClient.GetDirectoryClient("");

    PathAccessControl directoryAccessControl =
        await directoryClient.GetAccessControlAsync();

    List<PathAccessControlItem> accessControlListUpdate
        = (List<PathAccessControlItem>)directoryAccessControl.AccessControlList;

    PathAccessControlItem entryToRemove = null;

    foreach (var item in accessControlListUpdate)
    {
        if (item.EntityId == "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
        {
            entryToRemove = item;
            break;
        }
    }

    if (entryToRemove != null)
    {
        accessControlListUpdate.Remove(entryToRemove);
        directoryClient.SetAccessControlList(accessControlListUpdate);
    }

}

Rekursives Entfernen von ACL-Einträgen

Um ACL-Einträge rekursiv zu entfernen, erstellen Sie ein neues ACL-Objekt für den zu entfernenden ACL-Eintrag, und verwenden Sie dieses Objekt dann im Entfernungsvorgang der ACL. Rufen Sie nicht die vorhandene ACL ab, stellen Sie lediglich die zu entfernenden Einträge für die ACL bereit.

Sie entfernen ACL-Einträge, indem Sie die DataLakeDirectoryClient.RemoveAccessControlRecursiveAsync-Methode aufrufen. Übergeben Sie dieser Methode eine Liste der PathAccessControlItem. Jedes PathAccessControlItem-Element definiert einen ACL-Eintrag.

Wenn Sie einen standardmäßigen ACL-Eintrag entfernen möchten, dann können Sie die Eigenschaft PathAccessControlItem.DefaultScope der Eigenschaft PathAccessControlItem auf true festlegen.

In diesem Beispiel wird ein ACL-Eintrag aus der Zugriffssteuerungsliste des Verzeichnisses my-parent-directory entfernt. Diese Methode akzeptiert einen booleschen Parameter namens isDefaultScope, der angibt, ob der Eintrag aus der Standard-ACL entfernt werden soll. Dieser Parameter wird im Konstruktor von PathAccessControlItem verwendet.

public async Task RemoveACLsRecursively(DataLakeServiceClient serviceClient, bool isDefaultScope)
{
    DataLakeDirectoryClient directoryClient =
        serviceClient.GetFileSystemClient("my-container").
            GetDirectoryClient("my-parent-directory");

    List<RemovePathAccessControlItem> accessControlListForRemoval =
        new List<RemovePathAccessControlItem>()
        {
    new RemovePathAccessControlItem(AccessControlType.User, isDefaultScope,
    entityId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"),
        };

    await directoryClient.RemoveAccessControlRecursiveAsync
        (accessControlListForRemoval, null);

}

Wiederherstellen nach Fehlern

Beim rekursiven Ändern von Zugriffssteuerungslisten können Laufzeit- oder Berechtigungsfehler auftreten. Starten Sie den Prozess bei Laufzeitfehlern vom Anfang neu. Berechtigungsfehler können auftreten, wenn der Sicherheitsprinzipal nicht über ausreichende Berechtigungen verfügt, um die Zugriffssteuerungsliste eines Verzeichnisses oder einer Datei zu ändern, die sich in der geänderten Verzeichnishierarchie befindet. Beheben Sie das Berechtigungsproblem, und setzen Sie dann den Prozess ab dem Zeitpunkt des Fehlers mithilfe eines Fortsetzungstokens fort, oder starten Sie den Prozess vom Anfang neu. Sie müssen das Fortsetzungstoken nicht verwenden, wenn Sie vom Anfang neu starten. Sie können ACL-Einträge ohne negative Auswirkung erneut anwenden.

In diesem Beispiel wird im Fall eines Fehlers ein Fortsetzungstoken zurückgegeben. Die Anwendung kann diese Beispielmethode erneut aufrufen, nachdem der Fehler behoben wurde, und das Fortsetzungstoken übergeben. Wenn diese Beispielmethode zum ersten Mal aufgerufen wird, kann die Anwendung den Wert null für den Fortsetzungstokenparameter übergeben.

public async Task<string> ResumeAsync(DataLakeServiceClient serviceClient,
    DataLakeDirectoryClient directoryClient,
    List<PathAccessControlItem> accessControlList,
    string continuationToken)
{
    try
    {
        var accessControlChangeResult =
            await directoryClient.SetAccessControlRecursiveAsync(
                accessControlList, continuationToken: continuationToken, null);

        if (accessControlChangeResult.Value.Counters.FailedChangesCount > 0)
        {
            continuationToken =
                accessControlChangeResult.Value.ContinuationToken;
        }

        return continuationToken;
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
        return continuationToken;
    }

}

Wenn Sie möchten, dass der Prozess ohne Unterbrechung durch Berechtigungsfehler durchgeführt wird, können Sie dies angeben.

Um sicherzustellen, dass der Prozess ohne Unterbrechung durchgeführt wird, übergeben Sie ein AccessControlChangedOptions-Objekt, und legen Sie die Eigenschaft ContinueOnFailure dieses Objekts auf true fest.

In diesem Beispiel werden ACL-Einträge rekursiv festgelegt. Wenn dieser Code auf einen Berechtigungsfehler stößt, wird dieser Fehler aufgezeichnet und die Ausführung fortgesetzt. In diesem Beispiel wird die Anzahl der Fehler an die Konsole ausgegeben.

public async Task ContinueOnFailureAsync(DataLakeServiceClient serviceClient,
    DataLakeDirectoryClient directoryClient,
    List<PathAccessControlItem> accessControlList)
{
    var accessControlChangeResult =
        await directoryClient.SetAccessControlRecursiveAsync(
            accessControlList, null, new AccessControlChangeOptions()
            { ContinueOnFailure = true });

    var counters = accessControlChangeResult.Value.Counters;

    Console.WriteLine("Number of directories changed: " +
        counters.ChangedDirectoriesCount.ToString());

    Console.WriteLine("Number of files changed: " +
        counters.ChangedFilesCount.ToString());

    Console.WriteLine("Number of failures: " +
        counters.FailedChangesCount.ToString());
}

Bewährte Methoden

Dieser Abschnitt enthält einige Richtlinien zu bewährten Methoden für das rekursive Festlegen von Zugriffssteuerungslisten.

Behandeln von Laufzeitfehlern

Ein Laufzeitfehler kann aus vielen Gründen auftreten (z. B. bei einem Ausfall oder einem Clientkonnektivitätsproblem). Wenn ein Laufzeitfehler auftritt, starten Sie den rekursiven ACL-Prozess neu. Zugriffssteuerungslisten können ohne negative Auswirkungen erneut auf Elemente angewandt werden.

Behandeln von Berechtigungsfehlern (403)

Wenn beim Ausführen eines rekursiven ACL-Prozesses eine Zugriffssteuerungsausnahme auftritt, verfügt Ihr AD-Sicherheitsprinzipal möglicherweise nicht über ausreichende Berechtigungen zum Anwenden einer Zugriffssteuerungsliste auf eines der untergeordneten Elemente in der Verzeichnishierarchie. Wenn ein Berechtigungsfehler auftritt, wird der Prozess angehalten, und es wird ein Fortsetzungstoken bereitgestellt. Beheben Sie das Berechtigungsproblem, und verwenden Sie dann das Fortsetzungstoken, um das restliche Dataset zu verarbeiten. Die Verzeichnisse und Dateien, die bereits erfolgreich verarbeitet wurden, müssen nicht erneut verarbeitet werden. Sie können den rekursiven ACL-Prozess auch neu starten. Zugriffssteuerungslisten können ohne negative Auswirkungen erneut auf Elemente angewandt werden.

Anmeldeinformationen

Es wird empfohlen, einen Microsoft Entra-Sicherheitsprinzipal bereitzustellen, dem die Rolle Speicherblob-Datenbesitzer im Bereich des Zielspeicherkontos oder -containers zugewiesen wurde.

Leistung

Um die Latenz zu verringern, empfiehlt es sich, den rekursiven ACL-Prozess auf einem virtuellen Azure-Computer (VM) auszuführen, der sich in derselben Region wie das Speicherkonto befindet.

Einschränkungen bei Zugriffssteuerungslisten

Die maximale Anzahl von Zugriffssteuerungslisten, die Sie auf ein Verzeichnis oder eine Datei anwenden können, beträgt 32 ACLs für den Zugriff und 32 Standard-ACLs. Weitere Informationen finden Sie unter Zugriffssteuerung in Azure Data Lake Storage Gen2.

Weitere Informationen