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 eseguire la migrazione delle 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
- Un amministratore deve abilitare e applicare il controllo di accesso alle tabelle per l'area di lavoro.
- Il cluster deve essere abilitato per il controllo di accesso alle tabelle.
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:
privilege_type
è un tipo di privilegio metastore Hivesecurable_object
è un oggetto a protezione diretta nel metastore Hiveprincipal
è un utente, un'entità servizio (rappresentata dal relativo valore applicationId) o un gruppo. È necessario racchiudere utenti, entità servizio e nomi di gruppo con caratteri speciali nei backtick (` `
). Si veda Entità
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.
Titolarità 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 privilegiUSAGE
per lo schema - Avere il
USAGE
privilegio suCATALOG
o essere in un gruppo che ha ilUSAGE
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