Privilegi del metastore Hive e oggetti a protezione diretta (legacy)

Questo articolo descrive il modello di privilegio per il metastore Hive di Azure Databricks legacy, integrato in ogni area di lavoro di Azure Databricks. Descrive anche come concedere, negare e revocare privilegi per gli oggetti nel metastore Hive predefinito. Il catalogo unity usa un modello diverso per concedere privilegi. Vedere Privilegi del catalogo Unity e oggetti a protezione diretta.

Nota

Il controllo di accesso alle tabelle per i dati gestiti dal metastore Hive è un modello di governance dei dati legacy. Databricks consiglia di aggiornare le tabelle gestite dal metastore Hive al metastore di Unity Catalog. Unity Catalog semplifica la sicurezza e la governance dei dati fornendo un luogo centrale per amministrare e controllare l'accesso ai dati in più aree di lavoro nell'account. Per altre informazioni sul modo in cui il modello di privilegi legacy differisce dal modello di privilegi del catalogo Unity, vedere Usare il catalogo unity e il metastore Hive legacy.

Requisiti

Nota

  • Il controllo di accesso ai dati è sempre abilitato in Databricks SQL anche se il controllo di accesso alle tabelle non è abilitato per l'area di lavoro.
  • Se il controllo di accesso alle tabelle è abilitato per l'area di lavoro ed è già stato specificato ACL (concessi e negati) nell'area di lavoro, tali elenchi di controllo di accesso vengono rispettati in Databricks SQL.

Gestire i privilegi per gli oggetti nel metastore Hive

I privilegi per gli oggetti dati gestiti dal metastore Hive possono essere concessi da un amministratore dell'area di lavoro o dal proprietario di un oggetto. È possibile gestire i privilegi per gli oggetti metastore Hive usando i comandi SQL.

Per gestire i privilegi in SQL, usare le istruzioni GRANT, REVOKE, DENY, MSCK e SHOW GRANT in un notebook o nell'editor di query SQL di Databricks usando la sintassi :

GRANT privilege_type ON securable_object TO principal

Dove:

Per concedere un privilegio a tutti gli utenti nell'area di lavoro, concedere il privilegio al users gruppo. Ad esempio:

GRANT SELECT ON TABLE <schema-name>.<table-name> TO users

Per altre informazioni sulla gestione dei privilegi per gli oggetti nel metastore Hive tramite comandi SQL, vedere Privilegi e oggetti a protezione diretta nel metastore Hive.

È anche possibile gestire il controllo di accesso alle tabelle in una configurazione completamente automatizzata usando il provider Databricks Terraform e databricks_sql_permissions.

Proprietà di un oggetto

Quando il controllo di accesso alle tabelle è abilitato in un cluster o in un sql warehouse, un utente che crea uno schema, una tabella, una vista o una funzione diventa proprietario. Al proprietario vengono concessi tutti i privilegi e possono concedere privilegi ad altri utenti.

I gruppi possono possedere oggetti, nel qual caso tutti i membri del gruppo sono considerati proprietari.

Il proprietario di un oggetto o un amministratore dell'area di lavoro può trasferire la proprietà di un oggetto usando il comando seguente:

ALTER <object> OWNER TO `<user-name>@<user-domain>.com`

Nota

Quando il controllo di accesso alle tabelle è disabilitato in un cluster o in sql warehouse, i proprietari non vengono registrati quando viene creato uno schema, una tabella o una vista. Un amministratore dell'area di lavoro deve assegnare un proprietario all'oggetto usando il ALTER <object> OWNER TO comando .

Oggetti a protezione diretta nel metastore Hive

Gli oggetti a protezione diretta sono:

  • CATALOG: controlla l'accesso all'intero catalogo dati.

    • SCHEMA: controlla l'accesso a uno schema.
      • TABLE: controlla l'accesso a una tabella gestita o esterna.
      • VIEW: controlla l'accesso alle viste SQL.
      • FUNCTION: controlla l'accesso a una funzione denominata.
  • ANONYMOUS FUNCTION: controlla l'accesso a funzioni anonime o temporanee.

    Nota

    ANONYMOUS FUNCTION gli oggetti non sono supportati in Databricks SQL.

  • ANY FILE: controlla l'accesso al file system sottostante.

    Avviso

    Gli utenti a cui è stato concesso l'accesso ANY FILE possono ignorare le restrizioni applicate al catalogo, agli schemi, alle tabelle e alle viste leggendo direttamente dal file system.

Nota

I privilegi per le visualizzazioni temporanee globali e locali non sono supportati. Le visualizzazioni temporanee locali sono visibili solo all'interno della stessa sessione e le viste create nello global_temp schema sono visibili a tutti gli utenti che condividono un cluster o sql warehouse. Tuttavia, vengono applicati privilegi per le tabelle e le viste sottostanti a cui fanno riferimento le viste temporanee.

Privilegi che è possibile concedere agli oggetti metastore Hive

  • SELECT: consente l'accesso in lettura a un oggetto .
  • CREATE: consente di creare un oggetto , ad esempio una tabella in uno schema.
  • MODIFY: consente di aggiungere, eliminare e modificare i dati da o verso un oggetto .
  • USAGE: non offre alcuna capacità, ma è un requisito aggiuntivo per eseguire qualsiasi azione su un oggetto schema.
  • READ_METADATA: consente di visualizzare un oggetto e i relativi metadati.
  • CREATE_NAMED_FUNCTION: consente di creare una funzione definita dall'utente denominata in un catalogo o uno schema esistente.
  • MODIFY_CLASSPATH: consente di aggiungere file al percorso della classe Spark.
  • ALL PRIVILEGES: assegna tutti i privilegi (viene convertito in tutti i privilegi precedenti).

Nota

Il MODIFY_CLASSPATH privilegio non è supportato in Databricks SQL.

USAGE Privilegio

Per eseguire un'azione su un oggetto schema nel metastore Hive, un utente deve avere il USAGE privilegio su tale schema oltre al privilegio per eseguire tale azione. Uno dei seguenti soddisfa il USAGE requisito:

  • Essere un amministratore dell'area di lavoro
  • Avere il USAGE privilegio per lo schema o essere in un gruppo con privilegi USAGE per lo schema
  • Avere il USAGE privilegio su CATALOG o essere in un gruppo che ha il USAGE privilegio
  • Essere il proprietario dello schema o essere in un gruppo proprietario dello schema

Anche il proprietario di un oggetto all'interno di uno schema deve avere il USAGE privilegio per usarlo.

Gerarchia dei privilegi

Quando il controllo di accesso alle tabelle è abilitato nell'area di lavoro e in tutti i cluster, gli oggetti SQL in Azure Databricks sono gerarchici e i privilegi vengono ereditati verso il basso. Ciò significa che la concessione o la negazione di un privilegio per l'oggetto CATALOG concede o nega automaticamente il privilegio a tutti gli schemi nel catalogo. Analogamente, i privilegi concessi per un oggetto schema vengono ereditati da tutti gli oggetti in tale schema. Questo modello è true per tutti gli oggetti a protezione diretta.

Se si negano privilegi utente in una tabella, l'utente non può visualizzare la tabella tentando di elencare tutte le tabelle nello schema. Se si negano privilegi utente per uno schema, l'utente non può vedere che lo schema esiste tentando di elencare tutti gli schemi nel catalogo.

Funzioni di visualizzazione dinamica

Azure Databricks include due funzioni utente che consentono di esprimere le autorizzazioni a livello di colonna e di riga in modo dinamico nel corpo di una definizione di visualizzazione gestita dal metastore Hive.

  • current_user(): restituisce il nome utente corrente.
  • is_member(): determinare se l'utente corrente è membro di un gruppo di Azure Databricks specifico a livello di area di lavoro.

L'esempio seguente combina entrambe le funzioni per determinare se un utente dispone dell'appartenenza al gruppo appropriata:

-- Return: true if the user is a member and false if they are not
SELECT
  current_user as user,
-- Check to see if the current user is a member of the "Managers" group.
  is_member("Managers") as admin

Autorizzazioni a livello di colonna

È possibile usare le visualizzazioni dinamiche per limitare le colonne che un gruppo o un utente specifico può visualizzare. Si consideri l'esempio seguente in cui solo gli utenti che appartengono al auditors gruppo sono in grado di visualizzare gli indirizzi di posta elettronica della sales_raw tabella. In fase di analisi Spark sostituisce l'istruzione CASE con il valore letterale 'REDACTED' o la colonna email. Questo comportamento consente tutte le normali ottimizzazioni delle prestazioni fornite da Spark.

-- 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_group_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

Autorizzazioni a livello di riga

Usando le visualizzazioni dinamiche è possibile specificare le autorizzazioni fino al livello di riga o di campo. Si consideri l'esempio seguente, in cui solo gli utenti che appartengono al managers gruppo possono visualizzare gli importi delle transazioni (total colonna) maggiori di $ 1.000.000.00:

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  country,
  product,
  total
FROM sales_raw
WHERE
  CASE
    WHEN is_group_member('managers') THEN TRUE
    ELSE total <= 1000000
  END;

Maschera dati

Come illustrato negli esempi precedenti, è possibile implementare la maschera a livello di colonna per impedire agli utenti di visualizzare dati di colonna specifici, a meno che non si trovino nel gruppo corretto. Poiché queste viste sono SPARK SQL standard, è possibile eseguire tipi più avanzati di mascheramento con espressioni SQL più complesse. L'esempio seguente consente a tutti gli utenti di eseguire analisi sui domini di posta elettronica, ma consente ai membri del auditors gruppo di visualizzare gli indirizzi di posta elettronica completi degli utenti.

-- 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_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw