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. Visualizza i privilegi di Unity Catalog e gli oggetti proteggibili.
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 del Catalogo Unity. Unity Catalog semplifica la sicurezza e la governance dei dati fornendo una posizione centrale per amministrare e controllare l'accesso ai dati in più aree di lavoro nell'account. Per ulteriori informazioni su come il modello di privilegi legacy differisce dal modello di privilegi di Unity Catalog, vedere Usare Unity Catalog e il metastore Hive legacy.
Requisiti
- Un amministratore deve abilitare e far rispettare il controllo di accesso alle tabelle per l'area di lavoro.
- Il cluster deve essere abilitato per il controllo di accesso alla tabella .
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, si utilizza le istruzioni GRANT, REVOKE, DENY, , MSCKe SHOW GRANTS in un notebook o nell'editor di query SQL di Databricks, utilizzando la sintassi:
GRANT privilege_type ON securable_object TO principal
Dove:
-
privilege_type
è un tipo di privilegio metastore Hive -
securable_object
è un oggetto a protezione diretta nel metastore Hive -
principal
è 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 gruppo di users
. 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 di Databricks 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 ai quali è stato concesso l'accesso a
ANY FILE
possono ignorare le restrizioni applicate al catalogo, agli schemi, alle tabelle e alle viste leggendo direttamente dal filesystem.
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 schema global_temp
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 puoi concedere agli oggetti metastore di 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 privilegio USAGE
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 privilegio
USAGE
sullo schema o essere in un gruppo con il privilegioUSAGE
sullo 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 privilegio USAGE
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 il 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 gruppo di auditors
possono visualizzare gli indirizzi di posta elettronica dalla tabella sales_raw
. 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 gruppo managers
possono visualizzare gli importi delle transazioni ( colonnatotal
) 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