Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan szerezheti be, állíthatja be és frissítheti a címtárak és fájlok hozzáférés-vezérlési listáját a Java használatával.
Az ACL öröklési mechanizmus már elérhető a szülő könyvtár alatt újonnan létrehozott gyermekelemek számára. Szülőkönyvtár meglévő gyermekeleminek ACL-jeit rekurzívan adhatja hozzá, frissítheti és távolíthatja el anélkül, hogy ezek a módosítások mindegyik gyermekelem esetében külön-külön szükségesek lennének.
Package (Maven) | Minták | API referenciák | Gen1-ről Gen2-re térképezés | Visszajelzés küldése
Előfeltételek
- Azure-előfizetés – hozzon létre egyet ingyenesen.
- A hierarchikus névtérrel (HNS) kompatibilis Azure Storage-fiók. Az alábbi utasításokat követve hozzon létre egyet.
- A Java Development Kit (JDK) 8- vagy újabb verziója.
- Ebben a példában az Apache Maven használható a projektkezeléshez.
- Azure CLI-verzió
2.6.0
vagy újabb. - Az alábbi biztonsági engedélyek egyike:
- Egy kiépített Microsoft Entra ID biztonsági tag , amely a Storage Blob Data Owner szerepkörhöz lett hozzárendelve, hatóköre a céltárolóra, tárfiókra, szülőerőforrás-csoportra vagy előfizetésre terjed ki.
- Annak a céltárolónak vagy könyvtárnak a tulajdonosa, amelyre ACL-beállításokat kíván alkalmazni. Az ACL-ek rekurzív beállításához ez magában foglalja a céltárolóban vagy könyvtárban lévő összes gyermekelemet.
- Tárolási fiók kulcs.
A projekt beállítása
Feljegyzés
Ez a cikk a Maven buildelési eszközével hozza létre és futtatja a mintakódot. Más buildelési eszközök, például a Gradle is együttműködnek a Java Azure SDK-val.
A Maven használatával hozzon létre egy új konzolalkalmazást, vagy nyisson meg egy meglévő projektet. A csomagok telepítéséhez és a szükséges import
irányelvek hozzáadásához kövesse az alábbi lépéseket.
Csomagok telepítése
Nyissa meg a pom.xml
fájlt a szövegszerkesztőben. Telepítse a csomagokat a BOM-fájl bevonásával, vagy közvetlen függőség bevonásával.
A BOM-fájl belefoglalása
Az azure-sdk-bom hozzáadása a kódtár legújabb verziójától való függőséghez. Az alábbi kódrészletben cserélje le a {bom_version_to_target}
helyőrzőt a verziószámra. Az Azure-sdk-bom használatával nem kell megadnia az egyes függőségek verzióját. A BOM-ról további információt az Azure SDK BOM README-ben talál.
<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>
Adja hozzá a következő függőségi elemeket a függőségek csoportjához. Az Azure-szolgáltatásokhoz való jelszó nélküli kapcsolatokhoz azure-identitásfüggőség szükséges.
<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>
Közvetlen függőség belefoglalása
A kódtár egy adott verziójától való függőség felvételéhez adja hozzá a közvetlen függőséget a projekthez:
<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>
Importálási irányelvek belefoglalása
Adja hozzá a szükséges import
irányelveket. Ebben a példában a következő irányelveket adjuk hozzá a App.java fájlhoz:
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;
Csatlakozás a fiókhoz
A cikkben szereplő példakódok futtatásához létre kell hoznia egy DataLakeServiceClient-példányt , amely a tárfiókot jelöli. Az ügyfélobjektumot a Microsoft Entra-azonosító hitelesítő adataival vagy egy fiókkulcsmal engedélyezheti.
Az Azure Identity Java-ügyfélkódtárával hitelesítheti az alkalmazást a Microsoft Entra-azonosítóval.
Először az alábbi Azure-szerepköralapú hozzáférés-vezérlési (Azure RBAC) szerepkörök egyikét kell hozzárendelnie a biztonsági taghoz:
Szerepkör | ACL-beállítási képesség |
---|---|
Blobtár adatainak tulajdonosa | A fiók összes könyvtára és fájlja. |
Storage blobadat-közreműködő | Csak a biztonsági tag tulajdonában lévő könyvtárak és fájlok. |
Ezután hozzon létre egy DataLakeServiceClient-példányt , és adja át a DefaultAzureCredential osztály új példányát.
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;
}
Ha többet szeretne megtudni az adatokhoz való hozzáférés engedélyezéséről DefaultAzureCredential
, tekintse meg a Java-hoz készült Azure Identity ügyfélkódtárat.
ACL-ek beállítása
Az ACL beállításakor a teljes ACL-t lecseréli, beleértve az összes bejegyzést is. Ha módosítani szeretné egy biztonsági tag engedélyszintét, vagy új biztonsági tagot szeretne hozzáadni az ACL-hez anélkül, hogy más meglévő bejegyzéseket érinteni kellene, akkor ehelyett frissítenie kell az ACL-t. Az ACL lecserélése helyett az ACL frissítéséről a cikk ACL-ek frissítése című szakaszában olvashat.
Ha úgy dönt, hogy beállítja az ACL-t , hozzá kell adnia egy bejegyzést a tulajdonos felhasználóhoz, egy bejegyzést a tulajdonoscsoporthoz és egy bejegyzést az összes többi felhasználóhoz. A tulajdonos felhasználóról, a tulajdonosi csoportról és az összes többi felhasználóról további információt a Felhasználók és identitások című témakörben talál.
Ez a szakasz a következő lépéseket mutatja be:
- Címtár ACL-jének beállítása
- Fájl ACL-jének beállítása
- ACL-ek rekurzív beállítása
Címtár ACL-jének beállítása
Ez a példa lekéri, majd beállítja egy névvel ellátott könyvtár ACL-ét my-directory
. Ez a példa olvasási, írási és végrehajtási engedélyeket ad a tulajdonos felhasználónak, csak olvasási és végrehajtási engedélyeket ad a tulajdonoscsoportnak, és minden másnak olvasási hozzáférést biztosít.
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));
}
A tároló gyökérkönyvtárának ACL-jét is lekérheti és beállíthatja. A gyökérkönyvtár lekéréséhez adjon át egy üres karakterláncot (""
) a DataLakeFileSystemClient.getDirectoryClient metódusba.
Fájl ACL-jének beállítása
Ez a példa lekéri, majd beállítja egy nevű fájl ACL-ét upload-file.txt
. Ez a példa olvasási, írási és végrehajtási engedélyeket ad a tulajdonos felhasználónak, csak olvasási és végrehajtási engedélyeket ad a tulajdonoscsoportnak, és minden másnak olvasási hozzáférést biztosít.
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));
}
ACL-ek rekurzív beállítása
Az ACL-ek rekurzív beállítása a DataLakeDirectoryClient.setAccessControlRecursive metódus meghívásával. Adja át ezt a metódust a PathAccessControlEntry objektumok listájának. Minden PathAccessControlEntry definiál egy ACL-bejegyzést.
Ha alapértelmezett ACL-bejegyzést szeretne beállítani, meghívhatja a PathAccessControlEntry setDefaultScope metódusát, és igaz értéket adhat át.
Ez a példa egy névvel ellátott könyvtár ACL-jének my-parent-directory
beállítását állítja be. Ez a metódus egy logikai paramétert fogad el, isDefaultScope
amely meghatározza, hogy az alapértelmezett ACL-t kell-e beállítani. Ez a paraméter a PathAccessControlEntry setDefaultScope metódusának minden hívásában használatos. Az ACL bejegyzései olvasási, írási és végrehajtási engedélyeket adnak a tulajdonos felhasználónak, a tulajdonoscsoportnak csak olvasási és végrehajtási engedélyeket ad, és nem biztosít hozzáférést a többi felhasználónak. A példában az utolsó ACL-bejegyzés egy adott felhasználónak biztosít olvasási és végrehajtási engedélyeket az alábbi objektumazonosítóval: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".
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);
}
ACL-ek frissítése
Az ACL frissítésekor az ACL-t módosítja ahelyett, hogy lecseréli az ACL-t. Hozzáadhat például egy új biztonsági tagot az ACL-hez anélkül, hogy az az ACL-ben felsorolt többi biztonsági tagot érintené. Ha frissíteni szeretné az ACL-t a frissítés helyett, olvassa el a cikk ACL-ek beállítása című szakaszát.
Ez a szakasz a következő lépéseket mutatja be:
- ACL frissítése
- ACL-ek rekurzív frissítése
ACL frissítése
Először kérje le egy könyvtár ACL-ét a PathAccessControl.getAccessControlList metódus meghívásával. Másolja az ACL-bejegyzések listáját egy PathAccessControlListEntry típusú új listaobjektumba. Ezután keresse meg a frissíteni kívánt bejegyzést, és cserélje le a listában. Állítsa be az ACL-t a DataLakeDirectoryClient.setAccessControlList metódus meghívásával.
Ez a példa úgy frissíti egy my-parent-directory
nevű könyvtár ACL-jét, hogy lecseréli az összes többi felhasználóhoz tartozó bejegyzést.
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());
}
A tároló gyökérkönyvtárának ACL-ét is lekérheti és beállíthatja. A gyökérkönyvtár lekéréséhez adjon át egy üres karakterláncot (""
) a DataLakeFileSystemClient.getDirectoryClient metódusnak.
ACL-ek rekurzív frissítése
Az ACL rekurzív frissítéséhez hozzon létre egy új ACL-objektumot a frissíteni kívánt ACL-bejegyzéssel, majd használja ezt az objektumot az ACL-művelet frissítéséhez. Ne szerezze be a meglévő ACL-t, csak adja meg a frissíteni kívánt ACL-bejegyzéseket.
Az ACL-ek rekurzív frissítése a DataLakeDirectoryClient.updateAccessControlRecursive metódus meghívásával. Adja át ezt a metódust a PathAccessControlEntry objektumok listájának. Minden PathAccessControlEntry definiál egy ACL-bejegyzést.
Ha egy alapértelmezett ACL-bejegyzést szeretne frissíteni, meghívhatja a PathAccessControlEntry setDefaultScope metódusát, és igaz értéket adhat át.
Ez a példa egy írási engedéllyel rendelkező ACL-bejegyzést frissít. Ez a metódus elfogad egy logikai paramétert, amely isDefaultScope
megadja, hogy frissíteni kell-e az alapértelmezett ACL-t. Ezt a paramétert használja a PathAccessControlEntry setDefaultScope metódusának hívása.
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);
}
ACL-bejegyzések eltávolítása
Eltávolíthat egy vagy több ACL-bejegyzést. Ez a szakasz a következő lépéseket mutatja be:
- ACL-bejegyzés eltávolítása
- ACL-bejegyzések rekurzív eltávolítása
Távolítson el egy ACL-bejegyzést
Először kérje le egy könyvtár ACL-ét a PathAccessControl.getAccessControlList metódus meghívásával. Másolja az ACL-bejegyzések listáját egy PathAccessControlListEntry típusú új listaobjektumba. Ezután keresse meg az eltávolítani kívánt bejegyzést, és hívja meg a Lista objektum Eltávolítás metódusát. Állítsa be a frissített ACL-t a DataLakeDirectoryClient.setAccessControlList metódus meghívásával.
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());
}
}
ACL-bejegyzések rekurzív eltávolítása
Az ACL-bejegyzések rekurzív eltávolításához hozzon létre egy új ACL-objektumot az ACL-bejegyzés eltávolításához, majd használja ezt az objektumot az ACL-művelet eltávolításához. Ne szerezze be a meglévő ACL-t, csak adja meg az eltávolítandó ACL-bejegyzéseket.
Távolítsa el az ACL-bejegyzéseket a DataLakeDirectoryClient.removeAccessControlRecursive metódus meghívásával. Adja át ezt a metódust a PathAccessControlEntry objektumok listájának. Minden PathAccessControlEntry definiál egy ACL-bejegyzést.
Ha el szeretne távolítani egy alapértelmezett ACL-bejegyzést, meghívhatja a PathAccessControlEntry setDefaultScope metódusát, és igaz értéket adhat át.
Ez a példa eltávolít egy ACL-bejegyzést a névvel ellátott my-parent-directory
könyvtár ACL-éből. Ez a metódus egy logikai paramétert fogad el, isDefaultScope
amely megadja, hogy el kívánja-e távolítani a bejegyzést az alapértelmezett ACL-ből. Ezt a paramétert használja a PathAccessControlEntry setDefaultScope metódusának hívása.
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);
}
Hibákból való helyreállítás
Előfordulhatnak futtatási vagy engedélyezési hibák. Futásidejű hibák esetén indítsa újra a folyamatot az elejétől kezdve. Engedélyhibák akkor fordulhatnak elő, ha a rendszerbiztonsági tag nem rendelkezik elegendő engedéllyel a módosított címtár vagy fájl ACL-jének módosításához. Oldja meg az engedélyproblémát, majd válassza a folyamat folytatását a meghibásodási pontról egy folytatási jogkivonat használatával, vagy indítsa újra a folyamatot az elejétől. Nem kell a folytatási jogkivonatot használnia, ha az elejétől kezdve szeretne újraindulni. Az ACL-bejegyzéseket negatív hatás nélkül újra alkalmazhatja.
Ez a példa egy folytatási jogkódot ad vissza hiba esetén. Az alkalmazás a hiba elhárítása után újra meghívhatja ezt a példametódust, és átadhatja a folytatási jogkivonatot. Ha ez a példametódus első alkalommal van meghívva, az alkalmazás átadhat egy értéket a folytatási jogkivonat paraméterének null
.
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;
}
}
Ha azt szeretné, hogy a folyamat befejeződjön anélkül, hogy engedélyhibák közbeavatkoznának, ezt megadhatja.
Annak érdekében, hogy a folyamat zavartalanul befejeződjön, hívja meg a PathSetAccessControlRecursiveOptions objektum setContinueOnFailure metódusát, és adjon át igaz értéket.
Ez a példa rekurzív módon állítja be az ACL-bejegyzéseket. Ha ez a kód engedélyezési hibát tapasztal, rögzíti a hibát, és folytatja a végrehajtást. Ez a példa a hibák számát nyomtatja ki a konzolon.
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());
}
Ajánlott eljárások
Ez a szakasz az ACL-ek rekurzív beállítására vonatkozó ajánlott eljárásokat ismerteti.
Futtatókörnyezeti hibák kezelése
Futásidejű hiba több okból is előfordulhat (például kimaradás vagy ügyfélkapcsolati probléma). Ha futásidejű hibát tapasztal, indítsa újra a rekurzív ACL-folyamatot. Az ACL-ek újra alkalmazhatók az elemekre anélkül, hogy negatív hatással lenne.
Engedélyhibák kezelése (403)
Ha rekurzív ACL-folyamat futtatása közben hozzáférés-vezérlési kivételt tapasztal, előfordulhat, hogy az AD biztonsági tag nem rendelkezik elegendő engedéllyel ahhoz, hogy ACL-t alkalmazzon a címtárhierarchiában lévő gyermekelemek egy vagy több elemére. Engedélyhiba esetén a folyamat leáll, és egy folytatási tokent ad meg. Javítsa ki az engedélyproblémát, majd használja a folytatási jogkivonatot a fennmaradó adathalmaz feldolgozásához. A már sikeresen feldolgozott könyvtárakat és fájlokat nem kell újra feldolgozni. Dönthet úgy is, hogy újraindítja a rekurzív ACL-folyamatot. Az ACL-ek újra alkalmazhatók az elemekre anélkül, hogy negatív hatással lenne.
Igazolás
Javasoljuk, hogy kiépítsen egy Microsoft Entra biztonsági tagot, amely a Tárolóblob-adattulajdonos szerepkörhöz lett hozzárendelve a céltárfiók vagy tároló hatókörében.
Teljesítmény
A késés csökkentése érdekében javasoljuk, hogy futtassa a rekurzív ACL-folyamatot egy Olyan Azure-beli virtuális gépen (VM), amely a tárfiókja régiójában található.
ACL-korlátok
A címtárakra vagy fájlokra alkalmazható ACL-ek maximális száma 32 hozzáférési ACL és 32 alapértelmezett ACL. További információért lásd: Hozzáférés-vezérlés az Azure Data Lake Storage Gen2-ben.