Avvertenza: Tutte le opinioni espresse nel blog appartengono esclusivamente all’autore e non necessariamente al datore di lavoro dell’autore o a qualsiasi altro gruppo o individuo. Questo articolo non è una promozione per una piattaforma di gestione cloud/dati. Tutte le immagini e frammenti di codice sono disponibili pubblicamente sul sito web di Azure/Databricks.
Negli altri miei articoli su DZone, ho discusso cos’è l’Unity Catalog di Databricks, come funziona il modello di privilegi in Unity Catalog, livello di schema, e script per automatizzare la gestione dei permessi sia a livello di catalogo che di schema.
In questo articolo, l’obiettivo è fornire lo script che automatizzerà la gestione dei permessi a livello di tabella nell’Unity Catalog.
Privilegi a livello di tabella di Unity Catalog
Nell’Unity Catalog (Databricks), è necessario applicare permessi a livello di tabella quando si desidera controllare l’accesso a tabelle o viste specifiche, anziché applicare permessi a tutti gli oggetti all’interno di uno schema. I permessi a livello di tabella sono utili nei seguenti scenari:
1. Controllo d’accesso granulare
Quando è necessario concedere o limitare l’accesso a tabelle o viste specifiche senza influenzare l’intero schema.
Questo è particolarmente importante quando uno schema contiene dati sensibili e si desidera consentire l’accesso a alcune tabelle limitando l’accesso ad altre.
2. Protezione dei Dati Sensibili
Se alcune tabelle all’interno di uno schema contengono dati confidenziali o restrittivi (ad esempio, informazioni personali identificabili, dati finanziari), è possibile applicare autorizzazioni a livello di tabella per garantire che solo gli utenti autorizzati possano visualizzare o interrogare queste tabelle.
Ad esempio, potresti consentire l’accesso a alcune tabelle di dati riassuntivi o aggregati ma limitare l’accesso alle tabelle dettagliate contenenti informazioni sensibili.
3. Delega dell’Accesso a Team/Utenti Specifici Se lo Schema Contiene Tabelle Destinate a Diversi Team
Quando diversi utenti o team hanno bisogno di accedere a diverse tabelle all’interno dello stesso schema. Ad esempio, il team delle vendite potrebbe avere bisogno di accedere alle tabelle relative ai clienti, mentre il team finanziario ha bisogno di accedere alle tabelle dei ricavi.
Applicare autorizzazioni a livello di tabella garantisce che ciascun team possa accedere solo alle tabelle rilevanti per il proprio lavoro.
4. Conformità con la Governance dei Dati
Quando si applicano rigorose politiche di governance dei dati, potrebbe essere necessario controllare l’accesso a un livello più granulare (fino alle singole tabelle). Le autorizzazioni a livello di tabella aiutano a garantire la conformità concedendo l’accesso solo ai dati con cui un utente o un ruolo è autorizzato a lavorare.
5. Gestione delle Diverse Esigenze di Accesso All’interno di uno Schema
Nei casi in cui uno schema contiene tabelle con livelli di sensibilità o confidenzialità variabili, l’applicazione delle autorizzazioni a livello di schema potrebbe essere troppo ampia. Le autorizzazioni a livello di tabella ti consentono di gestire l’accesso per ciascuna tabella individualmente in base alle esigenze specifiche.
Autorizzazioni Che Possono Essere Applicate a Livello di Tabella
- SELECT: Concede l’accesso in lettura alla tabella, consentendo agli utenti di interrogarla.
- MODIFY: Conferisce la capacità di aggiungere, eliminare e modificare dati da o su un oggetto.
- APPLY TAG: Conferisce la capacità di applicare tag a un oggetto.
- ALL PRIVILEGES: Conferisce tutti i privilegi.
Script di Automazione
Prerequisiti
- Il Catalogo di Unity è già impostato.
- Il/i Principale/i è/sono associato/i allo spazio di lavoro di Databricks.
- L’utente che esegue lo script di autorizzazione ha le autorizzazioni appropriate sulle tabelle, sullo schema e sul catalogo.
Passaggio 1: Crea un Notebook e Dichiarare le Variabili
Crea un notebook nello spazio di lavoro di Databricks. Per creare un notebook nel tuo spazio di lavoro, fai clic sul “+” Nuovo nella barra laterale e poi scegli Notebook.
Si apre un notebook vuoto nello spazio di lavoro. Assicurati che Python sia selezionato come linguaggio del notebook.
Copia e incolla il frammento di codice qui sotto nella cella del notebook e esegui la cella.
catalog = 'main' # Specify your catalog name
schema = 'default' # Specify your schema name
tables_arr= 'test1,test2' # Specify the Comma(,) seperated values of table name
tables = tables_arr.split(',')
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(',')
Passo 2: Imposta il Catalogo e lo Schema
Copia, incolla e esegui il blocco di codice qui sotto in una nuova cella o in una cella esistente e esegui la cella.
query = f"USE CATALOG `{catalog}`" #Sets the Catalog
spark.sql(query)
query = f"USE SCHEMA `{schema}`" #Sets the Schema
spark.sql(query)
Passo 3: Scorrere i Principali e i Privilegi e Applicare il Permesso al Catalogo, Schema e Tabelle
Copia, incolla e esegui il blocco di codice qui sotto in una cella nuova o esistente, quindi esegui la cella per applicare i permessi.
for principal in principals:
query = f"GRANT USE_CATALOG ON CATALOG `{catalog}` TO `{principal}`" # Use catalog permission at Catalog level
spark.sql(query)
query = f"GRANT USE_SCHEMA ON SCHEMA `{schema}` TO `{principal}`" # Use schema permission at Schema level
spark.sql(query)
for table in tables:
for privilege in privileges:
query = f"GRANT `{privilege}` ON `{table}` TO `{principal}`" # Grant priviledges on the tables to the pricipal
print(query)
spark.sql(query)
Validazione
Puoi convalidare i privilegi aprendo l’interfaccia utente di Databricks e navigando su “Catalogo” nell’Esplora dati. Una volta visualizzato il catalogo nella sezione Dati, fai clic sul catalogo, espandi lo schema e seleziona la tabella all’interno dello schema dove hai applicato i permessi, e vai alla scheda “permessi”. Ora puoi vedere tutti i privilegi applicati alla tabella. Di seguito è riportata la schermata dei permessi applicati nella tabella del catalogo predefinita all’interno del catalogo principale e dello schema information_schema
.
Puoi anche eseguire lo script SQL qui sotto in un notebook per visualizzare tutti i permessi per una tabella come parte della tua convalida.
SHOW GRANTS ON TABLE table_name;
Conclusione
Automare la gestione dei privilegi in Databricks Unity Catalog a livello di tabella aiuta a garantire un approccio coerente ed efficiente nell’applicare le autorizzazioni al livello più basso nel catalogo Unity. Il codice fornito dimostra un modo pratico per assegnare privilegi a livello di tabella per diversi principali e tabelle in un singolo catalogo e schema. In un catalogo in cui sono presenti centinaia di tabelle e sono necessarie autorizzazioni diverse per principali diversi, l’automazione sopra descritta riduce significativamente gli errori manuali e lo sforzo.
Source:
https://dzone.com/articles/automate-databricks-unity-catalog-permissions-at-table-level