Disclaimer: Alle meningen en standpunten die in de blog worden uitgedrukt, behoren uitsluitend toe aan de auteur en niet noodzakelijk aan de werkgever van de auteur of enige andere groep of persoon. Dit artikel is geen promotie voor een cloud/data management platform. Alle afbeeldingen en codefragmenten zijn openbaar beschikbaar op de Azure/Databricks website.
In dit artikel zal ik het script geven om toegangsbeheer op het Unity Catalog-schema niveau te automatiseren.
Bevoegdheden op het Unity Catalog Schema Niveau
Het hiërarchische bevoegdhedenmodel in Unity Catalog stelt gebruikers in staat om bevoegdheden toe te passen op elk niveau in de hiërarchie, waarbij de onderliggende objecten automatisch dezelfde machtigingen erven. Dus als er bevoegdheden worden toegepast op het schemasniveau, worden deze automatisch toegepast op alle tabellen, views, volumes en functies binnen het schema.
In Unity Catalog (Databricks) worden bevoegdheden op het schemasniveau toegepast wanneer u toegang tot een set tabellen en views binnen een specifiek schema wilt beheren. Bevoegdheden op schemasniveau worden meestal toegepast in de volgende scenario’s:
- Toegang verlenen aan groepen objecten: Als u bevoegdheden voor meerdere tabellen en views collectief wilt beheren, is het efficiënter om bevoegdheden op het schemasniveau toe te passen in plaats van individueel voor elke tabel of view. Hiermee kunt u toegang tot alle objecten binnen dat schema gelijktijdig beheren.
- Organisatorische controle: Wanneer verschillende teams of afdelingen binnen een organisatie toegang nodig hebben tot specifieke datasets, die zijn opgeslagen onder aparte schema’s. Door machtigingen op schema-niveau toe te passen, kunt u toegang verlenen of beperken tot alle objecten die relevant zijn voor een team binnen dat schema.
- Consistent beheer van machtigingen: Voor omgevingen waarin nieuwe objecten (tabellen/weergaven) vaak aan een schema worden toegevoegd, zorgt het instellen van machtigingen op schema-niveau ervoor dat nieuwe objecten de machtigingen automatisch erven, waardoor de noodzaak voor handmatige machtigingsupdates wordt verminderd.
- Handhaven van gegevensbeveiliging: Wanneer u toegangscontroles wilt afdwingen over een bepaalde datasetcategorie (bijv. financiële gegevens, HR-gegevens) die logisch is georganiseerd onder een schema. Door machtigingen op schema-niveau in te stellen, handhaaft u de gegevensbeveiliging terwijl u de administratie vereenvoudigt.
Automatiseringsscript
Vereisten
- Unity Catalog is al ingesteld.
- Principal(en) is/zijn geassocieerd met de Databricks-werkruimte.
- De gebruiker die het machtigingsscript uitvoert, heeft de juiste machtigingen op het schema en de catalogus.
Stap 1: Maak een Notebook en Declareer de Variabelen
Maak een notebook in de Databricks-werkruimte. Om een notebook in uw werkruimte te maken, klikt u op het “+” Nieuw in de zijbalk, kies vervolgens Notebook.
Kopieer en plak de onderstaande codefragment in de notebookcel en voer de cel uit.
catalog = 'main' # Specify your catalog name
schema = 'default' # Specify your schema name
principals_arr = '' # Specify the Comma(,) seperated values for principals in the blank text section (e.g. groups, username)
principals = principals_arr.split(',')
privileges_arr = 'SELECT,APPLY TAG' # Specify the Comma(,) seperated values for priviledges in the blank text section (e.g. SELECT,APPLY TAG)
privileges = privileges_arr.split(',')
Stap 2: Stel de Catalogus en het Schema in
Kopieer, plak en voer de onderstaande codeblok uit in een nieuwe of bestaande cel en voer de cel uit.
query = f"USE CATALOG `{catalog}`" #Sets the Catalog
spark.sql(query)
Sstep 3: Loop door de Principalen en Rechten en Pas Grant toe op de Catalogus en het Schema
Kopieer, plak en voer de onderstaande codeblok uit in een nieuwe of bestaande cel, en voer de cel uit om de rechten toe te passen.
for principal in principals:
query = f"GRANT USE_CATALOG ON CATALOG `{catalog}` TO `{principal}`" # Apply use catalog permission at Catalog level
spark.sql(query)
query = f"USE SCHEMA `{schema}`" # Sets the schema
spark.sql(query)
query = f"GRANT USE_SCHEMA ON SCHEMA `{schema}` TO `{principal}`" # Apply use schema permission at Schema level
spark.sql(query)
for privilege in privileges:
query = f"GRANT `{privilege}` ON SCHEMA `{schema}` TO `{principal}`" # Use schema permission at Schema level
spark.sql(query)
Validatie
Je kunt de rechten valideren door de Databricks UI te openen en naar Catalogus in de Gegevensverkenner te navigeren. Zodra de catalogus verschijnt in de Gegevenssectie, klik je op de catalogus, selecteer je het schema waar je de rechten hebt toegepast en ga je naar het Rechten tabblad. Je kunt nu alle rechten zien die zijn toegepast op het schema.
Je kunt ook het onderstaande SQL-script uitvoeren in een notitieboek om alle rechten voor een schema weer te geven als onderdeel van je validatie.
SHOW GRANTS ON SCHEMA my_schema;
Conclusie
Het automatiseren van het beheer van rechten in Databricks Unity Catalog op schema-niveau helpt om consistente en efficiënte toegang te waarborgen voor de groep objecten (bijv. tabellen, weergaven, functies en volumes) in de catalogus. De gegeven code toont een praktische manier om rechten op schema-niveau toe te wijzen, waardoor het gemakkelijker wordt om rechten te beheren over principals (bijv. gebruikers en groepen). Deze aanpak vermindert de beheertaken en de kans op menselijke fouten door tabellen en weergaven binnen een schema te groeperen en consistente rechten voor het hele schema toe te passen.
Source:
https://dzone.com/articles/automate-databricks-unity-catalog-permissions-at-schema-level