Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se dozvíte, jak pomocí Javy získat, nastavit a aktualizovat seznamy adresářů a souborů řízení přístupu.
Dědičnost ACL je už k dispozici pro nové podřízené položky vytvořené v nadřazeném adresáři. Můžete přidávat, aktualizovat a odebírat ACL rekurzivně u existujících podřízených položek nadřazeného adresáře. Není nutné provádět tyto změny jednotlivě pro každou podřízenou položku.
Balíček (Maven) | Ukázky | Referenční informace k rozhraní API | Mapování Gen1 na Gen2 | Dejte zpětnou vazbu
Požadavky
- Předplatné Azure – vytvořte si ho zdarma.
- Účet úložiště Azure s povoleným hierarchickým oborem názvů (HNS). Postupujte podle těchto pokynů a vytvořte ho.
- Java Development Kit (JDK) verze 8 nebo novější.
- Apache Maven se používá pro řízení projektů v tomto příkladu.
- Verze
2.6.0
Azure CLI nebo vyšší. - Jedno z následujících oprávnění zabezpečení:
- Poskytnutý bezpečnostní objekt Microsoft Entra ID, kterému byla přiřazena role Vlastník dat služby Storage Blob, s rozsahem vymezeným na cílový kontejner, účet úložiště, nadřazenou skupinu prostředků nebo předplatné.
- Vlastník cílového kontejneru nebo adresáře, ke kterému plánujete použít nastavení ACL. Pokud chcete seznamy ACL nastavit rekurzivně, zahrnuje to všechny podřízené položky v cílovém kontejneru nebo adresáři.
- Klíč účtu úložiště.
Nastavení projektu
Poznámka:
Tento článek používá nástroj pro sestavení Maven k sestavení a spuštění ukázkového kódu. Další nástroje sestavení, jako je Gradle, také pracují se sadou Azure SDK pro Javu.
Pomocí Mavenu vytvořte novou konzolovou aplikaci nebo otevřete existující projekt. Podle těchto kroků nainstalujte balíčky a přidejte potřebné import
direktivy.
Instalace balíčků
Otevřete soubor v textovém pom.xml
editoru. Nainstalujte balíčky zahrnutím souboru seznamu součástí (BOM) nebo zahrnutím přímé závislosti.
Přidejte BOM soubor
Přidejte azure-sdk-bom , abyste mohli využívat závislost na nejnovější verzi knihovny. V následujícím fragmentu {bom_version_to_target}
kódu nahraďte zástupný symbol číslem verze. Použití azure-sdk-bom vás ušetří od nutnosti určovat verzi každé jednotlivé závislosti. Další informace o BOM najdete v dokumentaci Azure SDK BOM README.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version_to_target}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Do skupiny závislostí přidejte následující prvky závislostí. Závislost azure-identity je potřebná pro připojení bez hesla ke službám Azure.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-file-datalake</artifactId>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-common</artifactId>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
</dependency>
Zahrnutí přímé závislosti
Chcete-li využít konkrétní verzi knihovny, přidejte do projektu přímou závislost:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-file-datalake</artifactId>
<version>{package_version_to_target}</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-common</artifactId>
<version>{package_version_to_target}</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>{package_version_to_target}</version>
</dependency>
Zahrnout direktivy importu
Přidejte potřebné import
direktivy. V tomto příkladu přidáme do souboru App.java následující direktivy:
import com.azure.storage.common.StorageSharedKeyCredential;
import com.azure.storage.file.datalake.DataLakeDirectoryClient;
import com.azure.storage.file.datalake.DataLakeFileClient;
import com.azure.storage.file.datalake.DataLakeFileSystemClient;
import com.azure.storage.file.datalake.DataLakeServiceClient;
import com.azure.storage.file.datalake.DataLakeServiceClientBuilder;
import com.azure.storage.file.datalake.models.ListPathsOptions;
import com.azure.storage.file.datalake.models.PathItem;
import com.azure.storage.file.datalake.models.AccessControlChangeCounters;
import com.azure.storage.file.datalake.models.AccessControlChangeResult;
import com.azure.storage.file.datalake.models.AccessControlType;
import com.azure.storage.file.datalake.models.PathAccessControl;
import com.azure.storage.file.datalake.models.PathAccessControlEntry;
import com.azure.storage.file.datalake.models.PathPermissions;
import com.azure.storage.file.datalake.models.PathRemoveAccessControlEntry;
import com.azure.storage.file.datalake.models.RolePermissions;
import com.azure.storage.file.datalake.options.PathSetAccessControlRecursiveOptions;
Připojení k účtu
Pokud chcete spustit příklady kódu v tomto článku, musíte vytvořit instanci DataLakeServiceClient , která představuje účet úložiště. Klientský objekt můžete autorizovat pomocí přihlašovacích údajů Microsoft Entra ID nebo pomocí klíče účtu.
Klientskou knihovnu identit Azure pro Javu můžete použít k ověření vaší aplikace pomocí Microsoft Entra ID.
Nejprve budete muset k objektu zabezpečení přiřadit jednu z následujících rolí řízení přístupu na základě rolí v Azure (Azure RBAC):
Role | Možnost nastavení ACL |
---|---|
Vlastník dat v objektech blob služby Storage | Všechny adresáře a soubory v účtu. |
Přispěvatel dat úložiště Blob | Pouze adresáře a soubory vlastněné objektem zabezpečení. |
Dále vytvořte instanci DataLakeServiceClient a předejte novou instanci DefaultAzureCredential třídy.
static public DataLakeServiceClient GetDataLakeServiceClient(String accountName){
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder().build();
DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClientBuilder()
.endpoint("https://" + accountName + ".dfs.core.windows.net")
.credential(defaultCredential)
.buildClient();
return dataLakeServiceClient;
}
Další informace o autorizaci DefaultAzureCredential
přístupu k datům najdete v klientské knihovně Azure Identity pro Javu.
Nastavení seznamů ACL
Když nastavíte ACL, nahradíte celou ACL včetně všech jejích položek. Pokud chcete změnit úroveň oprávnění objektu zabezpečení nebo přidat nový objekt zabezpečení do seznamu ACL, aniž by to ovlivnilo jiné existující položky, měli byste místo toho aktualizovat seznam ACL. Pokud chcete místo nahrazení aktualizovat seznam ACL, přečtěte si část Aktualizace seznamů ACL tohoto článku.
Pokud se rozhodnete nastavit seznam ACL, musíte přidat položku pro vlastnícího uživatele, položku pro vlastnící skupinu a položku pro všechny ostatní uživatele. Další informace o vlastnícího uživatele, vlastnící skupině a všech ostatních uživatelích najdete v tématu Uživatelé a identity.
V této části se dozvíte, jak:
- Nastavit ACL adresáře
- Nastavte ACL souboru
- Rekurzivní nastavení seznamů ACL
Nastavit ACL adresáře
Tento příklad získá a potom nastaví ACL adresáře pojmenovaného my-directory
. Tento příklad dává vlastnící uživateli oprávnění ke čtení, zápisu a spouštění, dává vlastnící skupině oprávnění jen ke čtení a spouštění a dává všem ostatním přístup pro čtení.
public void ManageDirectoryACLs(DataLakeFileSystemClient fileSystemClient){
DataLakeDirectoryClient directoryClient =
fileSystemClient.getDirectoryClient("");
PathAccessControl directoryAccessControl =
directoryClient.getAccessControl();
List<PathAccessControlEntry> pathPermissions = directoryAccessControl.getAccessControlList();
System.out.println(PathAccessControlEntry.serializeList(pathPermissions));
RolePermissions groupPermission = new RolePermissions();
groupPermission.setExecutePermission(true).setReadPermission(true);
RolePermissions ownerPermission = new RolePermissions();
ownerPermission.setExecutePermission(true).setReadPermission(true).setWritePermission(true);
RolePermissions otherPermission = new RolePermissions();
otherPermission.setReadPermission(true);
PathPermissions permissions = new PathPermissions();
permissions.setGroup(groupPermission);
permissions.setOwner(ownerPermission);
permissions.setOther(otherPermission);
directoryClient.setPermissions(permissions, null, null);
pathPermissions = directoryClient.getAccessControl().getAccessControlList();
System.out.println(PathAccessControlEntry.serializeList(pathPermissions));
}
Můžete také získat a nastavit seznam ACL kořenového adresáře kontejneru. Kořenový adresář získáte předáním prázdného řetězce (""
) do metody DataLakeFileSystemClient.getDirectoryClient .
Nastavení ACL souboru
Tento příklad získá a potom nastaví ACL souboru s názvem upload-file.txt
. Tento příklad dává vlastnící uživateli oprávnění ke čtení, zápisu a spouštění, dává vlastnící skupině oprávnění jen ke čtení a spouštění a dává všem ostatním přístup pro čtení.
public void ManageFileACLs(DataLakeFileSystemClient fileSystemClient){
DataLakeDirectoryClient directoryClient =
fileSystemClient.getDirectoryClient("my-directory");
DataLakeFileClient fileClient =
directoryClient.getFileClient("uploaded-file.txt");
PathAccessControl fileAccessControl =
fileClient.getAccessControl();
List<PathAccessControlEntry> pathPermissions = fileAccessControl.getAccessControlList();
System.out.println(PathAccessControlEntry.serializeList(pathPermissions));
RolePermissions groupPermission = new RolePermissions();
groupPermission.setExecutePermission(true).setReadPermission(true);
RolePermissions ownerPermission = new RolePermissions();
ownerPermission.setExecutePermission(true).setReadPermission(true).setWritePermission(true);
RolePermissions otherPermission = new RolePermissions();
otherPermission.setReadPermission(true);
PathPermissions permissions = new PathPermissions();
permissions.setGroup(groupPermission);
permissions.setOwner(ownerPermission);
permissions.setOther(otherPermission);
fileClient.setPermissions(permissions, null, null);
pathPermissions = fileClient.getAccessControl().getAccessControlList();
System.out.println(PathAccessControlEntry.serializeList(pathPermissions));
}
Nastavte ACL rekurzivně
Nastavte seznamy ACL rekurzivně voláním DataLakeDirectoryClient.setAccessControlRecursive metoda. Předejte této metodě seznam objektů PathAccessControlEntry. Každá PathAccessControlEntry definuje položku seznamu ACL.
Pokud chcete nastavit výchozí položku ACL, můžete zavolat metodu setDefaultScope z PathAccessControlEntry a pak předat hodnotu true.
Tento příklad nastaví seznam ACL adresáře s názvem my-parent-directory
. Tato metoda přijímá logický parametr s názvem isDefaultScope
, který určuje, zda se má nastavit výchozí seznam ACL. Tento parametr se používá v každém volání setDefaultScope metoda PathAccessControlEntry. Položky seznamu ACL poskytují vlastnímu uživateli oprávnění ke čtení, zápisu a provádění, poskytují vlastní skupině oprávnění jen pro čtení a spouštění a nedává všem ostatním žádný přístup. Poslední položka seznamu ACL v tomto příkladu poskytuje konkrétnímu uživateli s ID objektu xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx oprávnění ke čtení a spuštění.
public void SetACLRecursively(DataLakeFileSystemClient fileSystemClient, Boolean isDefaultScope){
DataLakeDirectoryClient directoryClient =
fileSystemClient.getDirectoryClient("my-parent-directory");
List<PathAccessControlEntry> pathAccessControlEntries =
new ArrayList<PathAccessControlEntry>();
// Create owner entry.
PathAccessControlEntry ownerEntry = new PathAccessControlEntry();
RolePermissions ownerPermission = new RolePermissions();
ownerPermission.setExecutePermission(true).setReadPermission(true).setWritePermission(true);
ownerEntry.setDefaultScope(isDefaultScope);
ownerEntry.setAccessControlType(AccessControlType.USER);
ownerEntry.setPermissions(ownerPermission);
pathAccessControlEntries.add(ownerEntry);
// Create group entry.
PathAccessControlEntry groupEntry = new PathAccessControlEntry();
RolePermissions groupPermission = new RolePermissions();
groupPermission.setExecutePermission(true).setReadPermission(true).setWritePermission(false);
groupEntry.setDefaultScope(isDefaultScope);
groupEntry.setAccessControlType(AccessControlType.GROUP);
groupEntry.setPermissions(groupPermission);
pathAccessControlEntries.add(groupEntry);
// Create other entry.
PathAccessControlEntry otherEntry = new PathAccessControlEntry();
RolePermissions otherPermission = new RolePermissions();
otherPermission.setExecutePermission(false).setReadPermission(false).setWritePermission(false);
otherEntry.setDefaultScope(isDefaultScope);
otherEntry.setAccessControlType(AccessControlType.OTHER);
otherEntry.setPermissions(otherPermission);
pathAccessControlEntries.add(otherEntry);
// Create named user entry.
PathAccessControlEntry userEntry = new PathAccessControlEntry();
RolePermissions userPermission = new RolePermissions();
userPermission.setExecutePermission(true).setReadPermission(true).setWritePermission(false);
userEntry.setDefaultScope(isDefaultScope);
userEntry.setAccessControlType(AccessControlType.USER);
userEntry.setEntityId("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
userEntry.setPermissions(userPermission);
pathAccessControlEntries.add(userEntry);
directoryClient.setAccessControlRecursive(pathAccessControlEntries);
}
Aktualizace seznamů ACL
Při aktualizaci ACL jej upravíte místo jeho nahrazení. Můžete například přidat nový objekt zabezpečení do seznamu ACL, aniž by to ovlivnilo jiné objekty zabezpečení uvedené v seznamu ACL. Pokud chcete seznam ACL nahradit místo aktualizace, přečtěte si část Nastavení seznamů ACL tohoto článku.
V této části se dozvíte, jak:
- Aktualizace seznamu ACL
- Rekurzivní aktualizace seznamů ACL
Aktualizace seznamu ACL
Nejprve získejte seznam ACL adresáře voláním PathAccessControl.getAccessControlList metody. Zkopírujte seznam položek seznamu ACL do nového objektu List typu PathAccessControlListEntry. Potom vyhledejte položku, kterou chcete aktualizovat, a nahraďte ji v seznamu. Nastavte seznam ACL voláním Metody DataLakeDirectoryClient.setAccessControlList .
Tento příklad aktualizuje seznam ACL adresáře pojmenovaného my-parent-directory
nahrazením položky pro všechny ostatní uživatele.
public void UpdateACL(DataLakeFileSystemClient fileSystemClient, Boolean isDefaultScope){
DataLakeDirectoryClient directoryClient =
fileSystemClient.getDirectoryClient("my-parent-directory");
List<PathAccessControlEntry> pathAccessControlEntries =
directoryClient.getAccessControl().getAccessControlList();
int index = -1;
for (PathAccessControlEntry pathAccessControlEntry : pathAccessControlEntries){
if (pathAccessControlEntry.getAccessControlType() == AccessControlType.OTHER){
index = pathAccessControlEntries.indexOf(pathAccessControlEntry);
break;
}
}
if (index > -1){
PathAccessControlEntry userEntry = new PathAccessControlEntry();
RolePermissions userPermission = new RolePermissions();
userPermission.setExecutePermission(true).setReadPermission(true).setWritePermission(true);
userEntry.setDefaultScope(isDefaultScope);
userEntry.setAccessControlType(AccessControlType.OTHER);
userEntry.setPermissions(userPermission);
pathAccessControlEntries.set(index, userEntry);
}
directoryClient.setAccessControlList(pathAccessControlEntries,
directoryClient.getAccessControl().getGroup(),
directoryClient.getAccessControl().getOwner());
}
Můžete také získat a nastavit seznam ACL kořenového adresáře kontejneru. Kořenový adresář získáte předáním prázdného řetězce (""
) do metody DataLakeFileSystemClient.getDirectoryClient .
Rekurzivní aktualizace seznamů ACL
Chcete-li aktualizovat seznam ACL rekurzivně, vytvořte nový objekt ACL s položkou seznamu ACL, kterou chcete aktualizovat, a pak tento objekt použijte v operaci seznamu ACL aktualizace. Nezískávejte stávající ACL, pouze zadejte položky ACL, které se mají aktualizovat.
Aktualizujte seznamy ACL rekurzivně voláním Metody DataLakeDirectoryClient.updateAccessControlRecursive . Předejte této metodě objekty typu ListPathAccessControlEntry. Každá PathAccessControlEntry definuje položku seznamu ACL.
Pokud chcete aktualizovat výchozí položku seznamu ACL, můžete zavolat metodu setDefaultScope z PathAccessControlEntry a předat hodnotu true.
Tento příklad aktualizuje položku seznamu ACL oprávněním k zápisu. Tato metoda přijímá logický parametr s názvem isDefaultScope
, který určuje, zda se má aktualizovat výchozí seznam ACL. Tento parametr se používá ve volání setDefaultScope metoda PathAccessControlEntry.
public void UpdateACLRecursively(DataLakeFileSystemClient fileSystemClient, Boolean isDefaultScope){
DataLakeDirectoryClient directoryClient =
fileSystemClient.getDirectoryClient("my-parent-directory");
List<PathAccessControlEntry> pathAccessControlEntries =
new ArrayList<PathAccessControlEntry>();
// Create named user entry.
PathAccessControlEntry userEntry = new PathAccessControlEntry();
RolePermissions userPermission = new RolePermissions();
userPermission.setExecutePermission(true).setReadPermission(true).setWritePermission(true);
userEntry.setDefaultScope(isDefaultScope);
userEntry.setAccessControlType(AccessControlType.USER);
userEntry.setEntityId("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
userEntry.setPermissions(userPermission);
pathAccessControlEntries.add(userEntry);
directoryClient.updateAccessControlRecursive(pathAccessControlEntries);
}
Odstraňte položky ACL
Můžete odebrat jednu nebo více položek seznamu ACL. V této části se dozvíte, jak:
- Odebrání položky seznamu ACL
- Rekurzivní odebrání položek seznamu ACL
Odebrat položku ze seznamu ACL
Nejprve získejte seznam ACL adresáře voláním PathAccessControl.getAccessControlList metody. Zkopírujte seznam položek seznamu ACL do nového objektu List typu PathAccessControlListEntry. Potom vyhledejte položku, kterou chcete odebrat, a zavolejte Metodu Remove objektu List . Nastavte aktualizovaný seznam ACL voláním Metody DataLakeDirectoryClient.setAccessControlList .
public void RemoveACLEntry(DataLakeFileSystemClient fileSystemClient, Boolean isDefaultScope){
DataLakeDirectoryClient directoryClient =
fileSystemClient.getDirectoryClient("my-parent-directory");
List<PathAccessControlEntry> pathAccessControlEntries =
directoryClient.getAccessControl().getAccessControlList();
PathAccessControlEntry entryToRemove = null;
for (PathAccessControlEntry pathAccessControlEntry : pathAccessControlEntries){
if (pathAccessControlEntry.getEntityId() != null){
if (pathAccessControlEntry.getEntityId().equals("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")){
entryToRemove = pathAccessControlEntry;
break;
}
}
}
if (entryToRemove != null){
pathAccessControlEntries.remove(entryToRemove);
directoryClient.setAccessControlList(pathAccessControlEntries,
directoryClient.getAccessControl().getGroup(),
directoryClient.getAccessControl().getOwner());
}
}
Odebrat položky ACL rekurzivně
Chcete-li odebrat položky seznamu ACL rekurzivně, vytvořte nový objekt seznamu ACL pro položku seznamu ACL, který se má odebrat, a pak tento objekt použijte v operaci odebrání seznamu ACL. Stávající seznam ACL nezískáte, stačí zadat položky seznamu ACL, které se mají odebrat.
Odeberte položky seznamu ACL voláním metody DataLakeDirectoryClient.removeAccessControlRecursive. Předejte této metodě Seznam objektů PathAccessControlEntry. Každá PathAccessControlEntry definuje položku seznamu ACL.
Pokud chcete odebrat výchozí položku seznamu ACL, můžete volat metodu setDefaultScope, a předat do PathAccessControlEntry hodnotu true.
Tento příklad odebere položku ze seznamu ACL v adresáři s názvem my-parent-directory
. Tato metoda přijímá logický parametr s názvem isDefaultScope
, který určuje, zda má být položka odebrána z výchozího seznamu ACL. Tento parametr se používá ve volání setDefaultScope metoda PathAccessControlEntry.
public void RemoveACLEntryRecursively(DataLakeFileSystemClient fileSystemClient, Boolean isDefaultScope){
DataLakeDirectoryClient directoryClient =
fileSystemClient.getDirectoryClient("my-parent-directory");
List<PathRemoveAccessControlEntry> pathRemoveAccessControlEntries =
new ArrayList<PathRemoveAccessControlEntry>();
// Create named user entry.
PathRemoveAccessControlEntry userEntry = new PathRemoveAccessControlEntry();
RolePermissions userPermission = new RolePermissions();
userPermission.setExecutePermission(true).setReadPermission(true).setWritePermission(true);
userEntry.setDefaultScope(isDefaultScope);
userEntry.setAccessControlType(AccessControlType.USER);
userEntry.setEntityId("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
pathRemoveAccessControlEntries.add(userEntry);
directoryClient.removeAccessControlRecursive(pathRemoveAccessControlEntries);
}
Zotavení po selháních
Může dojít k chybám modulu runtime nebo oprávnění. V případě chyb za běhu restartujte proces od začátku. K chybám oprávnění může dojít v případě, že objekt zabezpečení nemá dostatečná oprávnění k úpravě seznamu ACL adresáře nebo souboru, který je v hierarchii adresářů, který se upravuje. Vyřešte problém s oprávněním a pak se rozhodnete proces obnovit z bodu selhání pomocí tokenu pokračování nebo ho restartovat od začátku. Pokud chcete restartovat od začátku, nemusíte token pokračování používat. Položky seznamu ACL můžete znovu použít bez negativního dopadu.
Tento příklad vrátí token pokračování v případě selhání. Aplikace může tuto metodu volat znovu po vyřešení chyby a předat token pokračování. Pokud se tato ukázková metoda volá poprvé, aplikace může předat hodnotu null
parametru tokenu pokračování.
public String ResumeSetACLRecursively(DataLakeFileSystemClient fileSystemClient,
DataLakeDirectoryClient directoryClient,
List<PathAccessControlEntry> accessControlList,
String continuationToken){
try{
PathSetAccessControlRecursiveOptions options = new PathSetAccessControlRecursiveOptions(accessControlList);
options.setContinuationToken(continuationToken);
Response<AccessControlChangeResult> accessControlChangeResult =
directoryClient.setAccessControlRecursiveWithResponse(options, null, null);
if (accessControlChangeResult.getValue().getCounters().getFailedChangesCount() > 0)
{
continuationToken =
accessControlChangeResult.getValue().getContinuationToken();
}
return continuationToken;
}
catch(Exception ex){
System.out.println(ex.toString());
return continuationToken;
}
}
Pokud chcete, aby proces dokončit bez přerušení kvůli chybám oprávnění, můžete to zadat.
Chcete-li zajistit, aby proces probíhal bez přerušení, zavolejte metodu setContinueOnFailure objektu PathSetAccessControlRecursiveOptions a předávejte hodnotu true.
Tento příklad nastaví položky seznamu ACL rekurzivně. Pokud tento kód narazí na chybu oprávnění, zaznamená toto selhání a pokračuje v provádění. V tomto příkladu se vypíše počet selhání na konzoli.
public void ContinueOnFailure(DataLakeFileSystemClient fileSystemClient,
DataLakeDirectoryClient directoryClient,
List<PathAccessControlEntry> accessControlList){
PathSetAccessControlRecursiveOptions options =
new PathSetAccessControlRecursiveOptions(accessControlList);
options.setContinueOnFailure(true);
Response<AccessControlChangeResult> accessControlChangeResult =
directoryClient.setAccessControlRecursiveWithResponse(options, null, null);
AccessControlChangeCounters counters = accessControlChangeResult.getValue().getCounters();
System.out.println("Number of directories changes: " +
counters.getChangedDirectoriesCount());
System.out.println("Number of files changed: " +
counters.getChangedDirectoriesCount());
System.out.println("Number of failures: " +
counters.getChangedDirectoriesCount());
}
Osvědčené postupy
Tato část obsahuje několik doporučení pro osvědčené postupy při rekurzivním nastavení seznamů řízení přístupu (ACL).
Zpracování chyb za běhu
K chybě za běhu může dojít z mnoha důvodů (například kvůli výpadku nebo problému s připojením klienta). Pokud dojde k chybě za běhu, restartujte rekurzivní proces ACL. Seznamy ACL je možné znovu použít u položek, aniž by to způsobilo negativní dopad.
Zpracování chyb oprávnění (403)
Pokud při spuštění rekurzivního procesu ACL narazíte na výjimku řízení přístupu, možná váš bezpečnostní hlavní objekt AD nemá dostatečná oprávnění k použití ACL na jednu nebo více podřízených položek v hierarchii adresářů. Pokud dojde k chybě oprávnění, proces se zastaví a poskytne se token pro pokračování. Opravte problém s oprávněním a pak pomocí tokenu pro pokračování zpracujte zbývající datovou sadu. Adresáře a soubory, které už byly úspěšně zpracovány, se nebudou muset znovu zpracovat. Můžete také zvolit restartování rekurzivního procesu přístupových kontrolních seznamů. ACL lze znovu aplikovat na položky bez způsobení negativního dopadu.
Přihlašovací údaje
Doporučujeme zřídit principála zabezpečení Microsoft Entra, který má přiřazenou roli Vlastník dat objektů blob služby Storage v rámci cílového účtu úložiště nebo kontejneru.
Výkon
Pokud chcete snížit latenci, doporučujeme spustit rekurzivní proces ACL ve virtuálním počítači Azure, který se nachází ve stejné oblasti jako váš účet pro úložiště.
Omezení ACL
Maximální počet seznamů ACL, které můžete použít pro adresář nebo soubor, je 32 přístupových seznamů ACL a 32 výchozích seznamů ACL. Další informace najdete v tématu Řízení přístupu ve službě Azure Data Lake Storage Gen2.