Az ACL-ek kezelése a Java használatával az Azure Data Lake Storage Gen2-ben
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és már elérhető a szülőkönyvtárban létrehozott új gyermekelemekhez. A szülőkönyvtár meglévő gyermekelemeit rekurzív módon is hozzáadhatja, frissítheti és eltávolíthatja anélkül, hogy ezeket a módosításokat külön-külön kellene végrehajtania minden gyermekelemhez.
Package (Maven) | Samples | API reference | Gen1 to Gen2 mapping | Give Feedback
Előfeltételek
Azure-előfizetés. Lásd: Ingyenes Azure-fiók létrehozása.
Hierarchikus névtérrel (HNS) rendelkező tárfiók. Az alábbi utasításokat követve hozzon létre egyet.
Azure CLI-verzió
2.6.0
vagy újabb.Az alábbi biztonsági engedélyek egyike:
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árfiókkulcs.
A projekt beállítása
Első lépésként nyissa meg ezt a lapot , és keresse meg a Java-kódtár legújabb verzióját. Ezután nyissa meg a pom.xml fájlt a szövegszerkesztőben. Adjon hozzá egy függőségi elemet, amely az adott verzióra hivatkozik.
Ha microsoft Entra-azonosítóval szeretné hitelesíteni az ügyfélalkalmazást, adjon hozzá egy függőséget az Azure Secret-ügyfélkódtárhoz. Lásd: Titkos ügyfélkódtár-csomag hozzáadása a projekthez.
Ezután adja hozzá ezeket az importálási utasításokat a kódfá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ő kódrészletek használatához létre kell hoznia egy DataLakeServiceClient-példányt , amely a tárfiókot jelöli.
Csatlakozás a Microsoft Entra ID használatával
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:
Role | ACL-beállítási képesség |
---|---|
Storage-blobadatok 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;
}
Az adatokhoz való hozzáférés engedélyezéséhez a DefaultAzureCredential használatával kapcsolatos további információkért tekintse meg az Azure Identity Java-ügyfélkódtárát.
Csatlakozás fiókkulcs használatával
Az adatokhoz való hozzáférést a fiók hozzáférési kulcsával (megosztott kulcs) engedélyezheti. Ez a példa létrehoz egy DataLakeServiceClient-példányt , amely a fiókkulccsal van engedélyezve.
static public DataLakeServiceClient GetDataLakeServiceClient
(String accountName, String accountKey){
StorageSharedKeyCredential sharedKeyCredential =
new StorageSharedKeyCredential(accountName, accountKey);
DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClientBuilder()
.endpoint("https://" + accountName + ".dfs.core.windows.net")
.credential(sharedKeyCredential)
.buildClient();
return dataLakeServiceClient;
}
Figyelmeztetés
A megosztott kulccsal való engedélyezés nem ajánlott, mivel kevésbé biztonságos. Az optimális biztonság érdekében tiltsa le a megosztott kulccsal történő engedélyezést a tárfiókhoz, az Azure Storage-fiók megosztott kulcsának engedélyezésének megakadályozása című cikkben leírtak szerint.
A hozzáférési kulcsok és a kapcsolati sztring használatát a koncepcióalkalmazások vagy a fejlesztési prototípusok kezdeti ellenőrzésére kell korlátozni, amelyek nem férnek hozzá éles vagy bizalmas adatokhoz. Ellenkező esetben az Azure SDK-ban elérhető jogkivonatalapú hitelesítési osztályokat mindig előnyben kell részesíteni az Azure-erőforrásokhoz való hitelesítéskor.
A Microsoft azt javasolja, hogy az ügyfelek a Microsoft Entra-azonosítót vagy a közös hozzáférésű jogosultságkódot (SAS) használják az Azure Storage-adatokhoz való hozzáférés engedélyezéséhez. További információ: Műveletek engedélyezése adathozzáféréshez.
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-ét is lekérheti és beállíthatja. A gyökérkönyvtár lekéréséhez adjon át egy üres sztringet (""
) 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 ad engedélyt a következő objektumazonosítóval: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" olvasási és végrehajtási engedélyek.
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 a névvel ellátott my-parent-directory
címtár ACL-ét, hogy lecseréli a bejegyzést az összes többi felhasználóra.
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 sztringet (""
) a DataLakeFileSystemClient.getDirectoryClient metódusba.
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
ACL-bejegyzés eltávolítása
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);
}
Helyreállítás hibákból
Futásidejű vagy engedélyhibákat tapasztalhat. 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 jogkivonatot ad vissza meghibásodás 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 megszakítás nélkül befejeződjön engedélyhibákkal, 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());
}
Best practices
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 jogkivonatot 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.
Hitelesítő adatok
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.