Creare una visualizzazione dinamica
In Unity Catalogè possibile usare views dinamico per configurare il controllo di accesso a fine granularità, tra cui:
- Sicurezza a livello di columns o righe.
- Maschera dati.
Unity Catalog introduce le funzioni seguenti, che consentono di limit dinamicamente quali utenti possono accedere a una riga, columno a un record in una visualizzazione:
-
current_user()
: restituisce l'indirizzo di posta elettronica dell'utente corrente. -
is_account_group_member()
: restituisceTRUE
se l'utente corrente è membro di un gruppo a livello di account specifico. Consigliato per l'uso nelle dinamiche di views in relazione ai dati di Unity Catalog. -
is_member()
: restituisceTRUE
se l'utente corrente è membro di un gruppo a livello di area di lavoro specifico. Questa funzione viene fornita per la compatibilità con il metastore Hive esistente. Evitare di usarlo con views sui dati di Unity Catalog, perché non valuta l'appartenenza a gruppi a livello di account.
Azure Databricks consiglia di non grant utenti la possibilità di leggere il tables e views a cui si fa riferimento nella visualizzazione.
Gli esempi seguenti illustrano come creare views dinamica in Unity Catalog.
Operazioni preliminari
Per creare o leggere viewsdinamiche, i requisiti sono gli stessi quelli per viewsstandard , ad eccezione dei requisiti di calcolo. È necessario usare una delle risorse di calcolo seguenti:
Un'istanza di SQL Warehouse.
Calcolo con modalità di accesso condiviso.
Calcolo con modalità di accesso utente singolo in Databricks Runtime 15.4 LTS o versione successiva.
Non è possibile leggere il dinamico views usando il calcolo utente singolo in Databricks Runtime 15.3 o versioni precedenti.
Per sfruttare i vantaggi del filtro dei dati fornito in Databricks Runtime 15.4 LTS e versioni successive, è anche necessario verificare che 'area di lavoro sia abilitata per l'elaborazione serverless, perché la funzionalità di filtro dei dati che supporta le views dinamiche viene eseguita nel calcolo serverless. È quindi possibile che vengano addebitati costi per le risorse di calcolo serverless quando si utilizza il calcolo per un singolo utente per leggere le dinamiche views. Vedere Controllo di accesso con granularità fine per il calcolo di un singolo utente.
autorizzazioni a livello di Column
Con una visualizzazione dinamica, è possibile limit l'accesso a columns di un utente o di un gruppo specifico. Nell'esempio seguente solo i membri del gruppo auditors
possono accedere agli indirizzi di posta elettronica del sales_raw
table. Durante l'analisi delle query, Apache Spark sostituisce l'istruzione CASE
con la stringa letterale REDACTED
o il contenuto effettivo dell'indirizzo di posta elettronica column. Altri columns vengono restituiti normalmente. Questa strategia non ha alcun impatto negativo sulle prestazioni delle query.
-- Alias the field 'email' to itself (as 'email') to prevent the
-- permission logic from showing up directly in the column name results.
CREATE VIEW sales_redacted AS
SELECT
user_id,
CASE WHEN
is_account_group_member('auditors') THEN email
ELSE 'REDACTED'
END AS email,
country,
product,
total
FROM sales_raw
Autorizzazioni a livello di riga
Con una visualizzazione dinamica, è possibile specificare le autorizzazioni fino al livello di riga o di campo. Nell'esempio seguente solo i membri del managers
gruppo possono visualizzare gli importi delle transazioni quando superano $1.000.000. I risultati corrispondenti vengono filtrati per gli altri utenti.
CREATE VIEW sales_redacted AS
SELECT
user_id,
country,
product,
total
FROM sales_raw
WHERE
CASE
WHEN is_account_group_member('managers') THEN TRUE
ELSE total <= 1000000
END;
Maschera dati
Poiché views in Unity Catalog usare Spark SQL, è possibile implementare la maschera dati avanzata usando espressioni SQL e espressioni regolari più complesse. Nell'esempio seguente tutti gli utenti possono analizzare i domini di posta elettronica, ma solo i membri del auditors
gruppo possono visualizzare l'intero indirizzo di posta elettronica di un utente.
-- The regexp_extract function takes an email address such as
-- user.x.lastname@example.com and extracts 'example', allowing
-- analysts to query the domain name.
CREATE VIEW sales_redacted AS
SELECT
user_id,
region,
CASE
WHEN is_account_group_member('auditors') THEN email
ELSE regexp_extract(email, '^.*@(.*)$', 1)
END
FROM sales_raw