Aracılığıyla paylaş


Azure Data Lake Storage 2. Nesil'de ACL'leri yönetmek için .NET kullanma

Bu makalede dizinlerin ve dosyaların erişim denetim listelerini almak, ayarlamak ve güncelleştirmek için .NET'in nasıl kullanılacağı gösterilmektedir.

ACL devralma, bir üst dizin altında oluşturulan yeni alt öğeler için zaten kullanılabilir. Ancak, her alt öğe için bu değişiklikleri tek tek yapmak zorunda kalmadan bir üst dizinin mevcut alt öğelerine ACL'leri yinelemeli olarak ekleyebilir, güncelleştirebilir ve kaldırabilirsiniz.

Paket (NuGet) | Örnekler | API başvurusu | 1. Nesil ile 2. Nesil eşlemesi | Geri Bildirim Ver

Ön koşullar

  • Azure aboneliği. Bkz. Azure ücretsiz deneme sürümü alma.

  • Hiyerarşik ad alanı (HNS) etkinleştirilmiş bir depolama hesabı. Oluşturmak için bu yönergeleri izleyin.

  • Azure CLI sürümü 2.6.0 veya üzeri.

  • Aşağıdaki güvenlik izinlerinden biri:

    • Hedef kapsayıcı, depolama hesabı, üst kaynak grubu veya abonelik kapsamında Depolama Blob Veri Sahibi rolü atanmış, sağlanan bir Microsoft Entra Id güvenlik sorumlusu.

    • ACL ayarlarını uygulamayı planladığınız hedef kapsayıcının veya dizinin sahibi olan kullanıcı. ACL'leri özyinelemeli olarak ayarlamak için, hedef kapsayıcıdaki veya dizindeki tüm alt öğeleri içerir.

    • hesap anahtarını Depolama.

Projenizi ayarlama

Başlamak için Azure.Depolama yükleyin. Files.DataLake NuGet paketi.

  1. Bir komut penceresi açın (Örneğin: Windows PowerShell).

  2. Proje dizininizden Azure'ı yükleyin. Depolama. komutunu kullanarak dotnet add package Files.DataLake önizleme paketi.

    dotnet add package Azure.Storage.Files.DataLake -v 12.6.0 -s https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-net/nuget/v3/index.json
    

    Ardından, bunları kod dosyanızın en üstüne using deyimleri ekleyin.

    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;
    

Hesaba Bağlan

Bu makaledeki kod parçacıklarını kullanmak için depolama hesabını temsil eden bir DataLakeServiceClient örneği oluşturmanız gerekir.

Microsoft Entra Id kullanarak Bağlan

Dekont

Erişimi yetkilendirmek için Microsoft Entra Id kullanıyorsanız güvenlik sorumlunuza Depolama Blob Veri Sahibi rolünün atandığından emin olun. ACL izinlerinin nasıl uygulandığı ve bunların değiştirilmesinin etkileri hakkında daha fazla bilgi edinmek için bkz. Azure Data Lake Storage 2. Nesil'de erişim denetimi modeli.

Microsoft Entra ID ile uygulamanızın kimliğini doğrulamak için .NET için Azure kimlik istemci kitaplığını kullanabilirsiniz.

Paketi yükledikten sonra bunu kod dosyanızın en üstüne using deyimini ekleyin.

using Azure.Identity;

İlk olarak, güvenlik sorumlunuza aşağıdaki Azure rol tabanlı erişim denetimi (Azure RBAC) rollerinden birini atamanız gerekir:

Rol ACL ayarı özelliği
Depolama Blob Verileri Sahibi Hesaptaki tüm dizinler ve dosyalar.
Depolama Blob Verileri Katkıda Bulunanı Yalnızca güvenlik sorumlusuna ait dizinler ve dosyalar.

Ardından bir DataLakeServiceClient örneği oluşturun ve DefaultAzureCredential sınıfının yeni bir örneğini geçirin.

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;
}

Verilere erişimi yetkilendirmek için DefaultAzureCredential kullanma hakkında daha fazla bilgi edinmek için bkz. Azure hizmetleriyle .NET uygulamalarının kimliğini doğrulama.

Hesap anahtarı kullanarak Bağlan

Hesap erişim anahtarlarınızı (Paylaşılan Anahtar) kullanarak verilere erişim yetkisi vekleyebilirsiniz. Bu örnek, hesap anahtarıyla yetkilendirilmiş bir DataLakeServiceClient örneği oluşturur.

public static DataLakeServiceClient GetDataLakeServiceClient(string accountName, string accountKey)
{
    StorageSharedKeyCredential sharedKeyCredential =
        new StorageSharedKeyCredential(accountName, accountKey);

    string dfsUri = $"https://{accountName}.dfs.core.windows.net";

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

    return dataLakeServiceClient;
}

Dikkat

Daha az güvenli olabileceği için Paylaşılan Anahtar ile yetkilendirme önerilmez. En iyi güvenlik için, Azure Depolama hesabı için Paylaşılan Anahtar yetkilendirmesini engelleme bölümünde açıklandığı gibi depolama hesabınız için Paylaşılan Anahtar aracılığıyla yetkilendirmeyi devre dışı bırakın.

Erişim anahtarlarının ve bağlantı dizesi kullanımı, üretim veya hassas verilere erişmeyen ilk kavram kanıtı uygulamaları veya geliştirme prototipleriyle sınırlandırılmalıdır. Aksi takdirde, Azure kaynaklarında kimlik doğrulaması yapılırken Azure SDK'da bulunan belirteç tabanlı kimlik doğrulama sınıfları her zaman tercih edilmelidir.

Microsoft, istemcilerin Azure Depolama'daki verilere erişim yetkisi vermek için Microsoft Entra Id veya paylaşılan erişim imzası (SAS) kullanmasını önerir. Daha fazla bilgi için bkz . Veri erişimi için işlemleri yetkilendirme.

ACL'leri ayarlama

Bir ACL ayarladığınızda, tüm girdileri dahil olmak üzere ACL'nin tamamını değiştirirsiniz. Bir güvenlik sorumlusunun izin düzeyini değiştirmek veya var olan diğer girişleri etkilemeden ACL'ye yeni bir güvenlik sorumlusu eklemek istiyorsanız, bunun yerine ACL'yi güncelleştirmeniz gerekir. ACL'yi değiştirmek yerine güncelleştirmek için bu makalenin ACL'leri güncelleştirme bölümüne bakın.

ACL'yi ayarlamayı seçerseniz, sahip olan kullanıcı için bir girdi, sahip olan grup için bir girdi ve diğer tüm kullanıcılar için bir girdi eklemeniz gerekir. Sahip olan kullanıcı, sahip olan grup ve diğer tüm kullanıcılar hakkında daha fazla bilgi edinmek için bkz . Kullanıcılar ve kimlikler.

Bu bölümde şunların nasıl yapıldığını görebilirsiniz:

  • Dizinin ACL'sini ayarlama
  • Dosyanın ACL'sini ayarlama
  • ACL’leri özyinelemeli olarak belirleme

Dizinin ACL'sini ayarlama

DataLakeDirectoryClient.GetAccessControlAsync yöntemini çağırarak dizinin erişim denetim listesini (ACL) alın ve DataLakeDirectoryClient.SetAccessControlList yöntemini çağırarak ACL'yi ayarlayın.

Bu örnek adlı my-directorydizinin ACL'sini alır ve ayarlar. Dize user::rwx,group::r-x,other::rw- , sahibi olan kullanıcıya okuma, yazma ve yürütme izinleri verir, sahip olan gruba yalnızca okuma ve yürütme izinleri verir ve diğer tüm kullanıcılara okuma ve yazma izni verir.

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);

}

Ayrıca bir kapsayıcının kök dizininin ACL'sini alabilir ve ayarlayabilirsiniz. Kök dizini almak için DataLakeFileSystemClient.GetDirectoryClient yöntemine boş bir dize ("") geçirin.

Dosyanın ACL'sini ayarlama

DataLakeFileClient.GetAccessControlAsync yöntemini çağırarak bir dosyanın erişim denetim listesini (ACL) alın ve DataLakeFileClient.SetAccessControlList yöntemini çağırarak ACL'yi ayarlayın.

Bu örnek adlı my-file.txtdosyanın ACL'sini alır ve ayarlar. Dize user::rwx,group::r-x,other::rw- , sahibi olan kullanıcıya okuma, yazma ve yürütme izinleri verir, sahip olan gruba yalnızca okuma ve yürütme izinleri verir ve diğer tüm kullanıcılara okuma ve yazma izni verir.

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);
}

ACL’leri özyinelemeli olarak belirleme

DataLakeDirectoryClient.SetAccessControlRecursiveAsync yöntemini çağırarak ACL'leri özyinelemeli olarak ayarlayın. Bu yönteme Bir PathAccessControlItem Listesigeçirin. Her PathAccessControlItem bir ACL girdisi tanımlar.

Varsayılan bir ACL girdisi ayarlamak istiyorsanız, PathAccessControlItem.DefaultScope özelliğini true olarak ayarlayabilirsiniz.

Bu örnek adlı my-parent-directorydizinin ACL'sini ayarlar. Bu yöntem, varsayılan ACL'nin ayarlanıp ayarlanmayacağını belirten adlı isDefaultScope boole parametresini kabul eder. Bu parametre PathAccessControlItem oluşturucusunda kullanılır. ACL'nin girişleri sahip olan kullanıcıya okuma, yazma ve yürütme izinleri verir, sahip olan gruba yalnızca okuma ve yürütme izinleri verir ve diğer tüm kullanıcılara erişim vermez. Bu örnekteki son ACL girdisi, nesne kimliğine xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx sahip belirli bir kullanıcıya okuma ve yürütme izinleri verir.

    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);
}

ACL'leri güncelleştirme

Bir ACL'yi güncelleştirdiğinizde, ACL'yi değiştirmek yerine ACL'yi değiştirirsiniz. Örneğin, ACL'de listelenen diğer güvenlik sorumlularını etkilemeden ACL'ye yeni bir güvenlik sorumlusu ekleyebilirsiniz. ACL'yi güncelleştirmek yerine değiştirmek için bu makalenin ACL'leri ayarlama bölümüne bakın.

Bu bölümde şunların nasıl yapıldığını görebilirsiniz:

  • ACL'yi güncelleştirme
  • ACL'leri özyinelemeli olarak güncelleştirme

ACL'yi güncelleştirme

İlk olarak, DataLakeDirectoryClient.GetAccessControlAsync yöntemini çağırarak dizinin ACL'sini alın. ACL girdileri listesini yeni bir PathAccessControl nesneleri listesinekopyalayın. Ardından, güncelleştirmek istediğiniz girdiyi bulun ve listeden değiştirin. DataLakeDirectoryClient.SetAccessControlList yöntemini çağırarak ACL'yi ayarlayın.

Bu örnek, diğer tüm kullanıcılar için ACL girişini değiştirerek kapsayıcının kök ACL'sini güncelleştirir.

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);
    }

   }

ACL'leri özyinelemeli olarak güncelleştirme

Bir ACL'yi özyinelemeli olarak güncelleştirmek için, güncelleştirmek istediğiniz ACL girişiyle yeni bir ACL nesnesi oluşturun ve ardından bu nesneyi güncelleştirme ACL işleminde kullanın. Mevcut ACL'yi almayın, yalnızca güncelleştirilecek ACL girdilerini sağlayın.

DataLakeDirectoryClient.UpdateAccessControlRecursiveAsync yöntemini çağırarak bir ACL'yi özyinelemeli olarak güncelleştirin. Bu yönteme Bir PathAccessControlItem Listesigeçirin. Her PathAccessControlItem bir ACL girdisi tanımlar.

Varsayılan bir ACL girdisini güncelleştirmek istiyorsanız, PathAccessControlItem.DefaultScope özelliğini true olarak ayarlayabilirsiniz.

Bu örnek, yazma iznine sahip bir ACL girdisi güncelleştirir. Bu yöntem, varsayılan ACL'nin güncelleştirilip güncelleştirilmeyeceğini belirten adlı isDefaultScope boole parametresini kabul eder. Bu parametre PathAccessControlItem oluşturucusunda kullanılır.

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);

}

ACL girdilerini kaldırma

Bir veya daha fazla ACL girdisini kaldırabilirsiniz. Bu bölümde şunların nasıl yapıldığını görebilirsiniz:

  • ACL girdisini kaldırma
  • ACL girdilerini özyinelemeli olarak kaldırma

ACL girdisini kaldırma

İlk olarak, DataLakeDirectoryClient.GetAccessControlAsync yöntemini çağırarak dizinin ACL'sini alın. ACL girdileri listesini yeni bir PathAccessControl nesneleri listesinekopyalayın. Ardından kaldırmak istediğiniz girdiyi bulun ve koleksiyonun Remove yöntemini çağırın. DataLakeDirectoryClient.SetAccessControlList yöntemini çağırarak güncelleştirilmiş ACL'yi ayarlayın.

Bu örnek, diğer tüm kullanıcılar için ACL girişini değiştirerek kapsayıcının kök ACL'sini güncelleştirir.

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);
    }

}

ACL girdilerini özyinelemeli olarak kaldırma

ACL girdilerini özyinelemeli olarak kaldırmak için, kaldırılacak ACL girdisi için yeni bir ACL nesnesi oluşturun ve ardından bu nesneyi ACL'yi kaldırma işleminde kullanın. Mevcut ACL'yi almayın, yalnızca kaldırılacak ACL girdilerini sağlayın.

DataLakeDirectoryClient.RemoveAccessControlRecursiveAsync yöntemini çağırarak ACL girdilerini kaldırın. Bu yönteme Bir PathAccessControlItem Listesigeçirin. Her PathAccessControlItem bir ACL girdisi tanımlar.

Varsayılan bir ACL girdisini kaldırmak istiyorsanız, PathAccessControlItem'ın PathAccessControlItem.DefaultScope özelliğini true olarak ayarlayabilirsiniz.

Bu örnek, adlı my-parent-directorydizinin ACL'sinden bir ACL girdisini kaldırır. Bu yöntem, girdinin varsayılan ACL'den kaldırılıp kaldırılmayacağını belirten adlı isDefaultScope boole parametresini kabul eder. Bu parametre PathAccessControlItem oluşturucusunda kullanılır.

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);

}

Hatalardan kurtarma

ACL'leri yinelemeli olarak değiştirirken çalışma zamanı veya izin hatalarıyla karşılaşabilirsiniz. Çalışma zamanı hataları için, işlemi baştan yeniden başlatın. Güvenlik sorumlusunun değiştirilmekte olan dizin hiyerarşisindeki bir dizin veya dosyanın ACL'sini değiştirmek için yeterli izni yoksa izin hataları oluşabilir. İzin sorununu giderin ve devam belirteci kullanarak işlemi hata noktasından sürdürmeyi veya işlemi baştan yeniden başlatmayı seçin. Baştan yeniden başlatmayı tercih ediyorsanız devamlılık belirtecini kullanmanız gerekmez. ACL girişlerini herhangi bir olumsuz etki olmadan yeniden uygulayın.

Bu örnek, hata durumunda bir devamlılık belirteci döndürür. Uygulama, hata giderildikten sonra bu örnek yöntemi yeniden çağırabilir ve devamlılık belirtecini geçirebilir. Bu örnek yöntem ilk kez çağrılırsa, uygulama devamlılık belirteci parametresi için değerini null geçirebilir.

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;
    }

}

İşlemin izin hataları tarafından kesintisiz tamamlanmasını istiyorsanız, bunu belirtebilirsiniz.

İşlemin kesintisiz tamamlanmasını sağlamak için bir AccessControlChangedOptions nesnesi geçirin ve bu nesnenin ContinueOnFailure özelliğini olarak trueayarlayın.

Bu örnek, ACL girdilerini özyinelemeli olarak ayarlar. Bu kod bir izin hatasıyla karşılaşırsa, bu hatayı kaydeder ve yürütmeye devam eder. Bu örnek, konsoldaki hata sayısını yazdırır.

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());
}

En iyi yöntemler

Bu bölümde, ACL'leri özyinelemeli olarak ayarlamak için bazı en iyi yöntem yönergeleri sağlanır.

Çalışma zamanı hatalarını işleme

Çalışma zamanı hatası birçok nedenden oluşabilir (Örneğin: kesinti veya istemci bağlantısı sorunu). Çalışma zamanı hatasıyla karşılaşırsanız özyinelemeli ACL işlemini yeniden başlatın. ACL'ler olumsuz bir etkiye neden olmadan öğelere yeniden uygulanabilir.

İzin hatalarını işleme (403)

Özyinelemeli bir ACL işlemi çalıştırırken erişim denetimi özel durumuyla karşılaşırsanız, AD güvenlik sorumlunuz dizin hiyerarşisindeki bir veya daha fazla alt öğeye ACL uygulamak için yeterli izne sahip olmayabilir. İzin hatası oluştuğunda işlem durdurulur ve bir devam belirteci sağlanır. İzin sorununu düzeltin ve kalan veri kümesini işlemek için devamlılık belirtecini kullanın. Zaten başarıyla işlenen dizinlerin ve dosyaların yeniden işlenmesi gerekmez. Özyinelemeli ACL işlemini yeniden başlatmayı da seçebilirsiniz. ACL'ler olumsuz bir etkiye neden olmadan öğelere yeniden uygulanabilir.

Kimlik Bilgileri

Hedef depolama hesabı veya kapsayıcı kapsamında Depolama Blob Veri Sahibi rolü atanmış bir Microsoft Entra güvenlik sorumlusu sağlamanızı öneririz.

Performans

Gecikme süresini azaltmak için, özyinelemeli ACL işlemini depolama hesabınızla aynı bölgede bulunan bir Azure Sanal Makinesi'nde (VM) çalıştırmanızı öneririz.

ACL sınırları

Bir dizine veya dosyaya uygulayabileceğiniz maksimum ACL sayısı 32 erişim ACL'leri ve 32 varsayılan ACL'dir. Daha fazla bilgi için bkz. Azure Data Lake Storage 2. Nesil'de erişim denetimi.

Ayrıca bkz.