Creare una visualizzazione dinamica

In Unity Catalog è possibile usare le visualizzazioni dinamiche per configurare il controllo di accesso con granularità fine, tra cui:

  • Sicurezza a livello di colonne o righe.
  • Maschera dati.

Unity Catalog introduce le funzioni seguenti, che consentono di limitare in modo dinamico gli utenti che possono accedere a una riga, una colonna o un record in una visualizzazione:

  • current_user(): restituisce l'indirizzo di posta elettronica dell'utente corrente.
  • is_account_group_member(): restituisce TRUE se l'utente corrente è membro di un gruppo a livello di account specifico. Consigliato per l'uso nelle visualizzazioni dinamiche sui dati di Unity Catalog.
  • is_member(): restituisce TRUE 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 visualizzazioni sui dati di Unity Catalog, perché non valuta l'appartenenza a gruppi a livello di account.

Azure Databricks consiglia di non concedere agli utenti la possibilità di leggere le tabelle e le viste a cui si fa riferimento nella vista.

Gli esempi seguenti illustrano come creare visualizzazioni dinamiche in Unity Catalog.

Operazioni preliminari

Per creare o leggere viste dinamiche, i requisiti sono uguali a quelli per le viste standard, 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 le viste dinamiche usando il calcolo utente singolo in Databricks Runtime 15.3 o versione successiva.

    Per sfruttare i vantaggi del filtro dei dati fornito in Databricks Runtime 15.4 LTS e versioni successive, è anche necessario verificare che l'area di lavoro sia abilitata per il calcolo serverless, perché la funzionalità di filtro dei dati che supporta le visualizzazioni dinamiche viene eseguita nel calcolo serverless. È quindi possibile che vengano addebitati costi per le risorse di calcolo serverless quando si usa il calcolo utente singolo per leggere le visualizzazioni dinamiche. Vedere Controllo di accesso con granularità fine per il calcolo di un singolo utente.

Autorizzazioni a livello di colonna

Con una visualizzazione dinamica, è possibile limitare le colonne a cui un utente o un gruppo specifico può accedere. Nell'esempio seguente solo i membri del auditors gruppo possono accedere agli indirizzi di posta elettronica dalla sales_raw tabella. Durante l'analisi delle query, Apache Spark sostituisce l'istruzione CASE con la stringa REDACTED letterale o il contenuto effettivo della colonna dell'indirizzo di posta elettronica. Le altre colonne vengono restituite 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é le viste nel catalogo unity usano 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