Hive-metaarkivbehörigheter och skyddsbara objekt (äldre)
I den här artikeln beskrivs privilegiemodellen för det äldre Azure Databricks Hive-metaarkivet, som är inbyggt i varje Azure Databricks-arbetsyta. Den beskriver också hur du beviljar, nekar och återkallar behörigheter för objekt i det inbyggda Hive-metaarkivet. Unity Catalog använder en annan modell för att bevilja privilegier. Se Behörigheter och skyddsbara objekt i Unity Catalog.
Kommentar
Tabellåtkomstkontroll för data som hanteras av Hive-metaarkivet är en äldre datastyrningsmodell. Databricks rekommenderar att du uppgraderar tabellerna som hanteras av Hive-metaarkivet till Unity Catalog-metaarkivet. Unity Catalog förenklar säkerheten och styrningen av dina data genom att tillhandahålla en central plats för att administrera och granska dataåtkomst över flera arbetsytor i ditt konto. Mer information om hur den äldre behörighetsmodellen skiljer sig från Unity Catalog-behörighetsmodellen finns i Arbeta med Unity Catalog och det äldre Hive-metaarkivet.
Krav
- En administratör måste aktivera och framtvinga tabellåtkomstkontroll för arbetsytan.
- Klustret måste vara aktiverat för tabellåtkomstkontroll.
Kommentar
- Dataåtkomstkontroll är alltid aktiverad i Databricks SQL även om åtkomstkontroll för tabeller inte är aktiverad för arbetsytan.
- Om tabellåtkomstkontroll är aktiverad för arbetsytan och du redan har angett ACL:er (beviljad och nekad behörighet) på arbetsytan, respekteras dessa ACL:er i Databricks SQL.
Hantera behörigheter för objekt i Hive-metaarkivet
Behörigheter för dataobjekt som hanteras av Hive-metaarkivet kan beviljas av antingen en arbetsyteadministratör eller ägaren av ett objekt. Du kan hantera behörigheter för Hive-metaarkivobjekt med hjälp av SQL-kommandon.
Om du vill hantera behörigheter i SQL använder du GRANT, REVOKE, DENY, MSCKoch SHOW GRANTS-instruktioner i en notebook-fil eller Databricks SQL-frågeredigeraren med hjälp av syntaxen:
GRANT privilege_type ON securable_object TO principal
Där:
-
privilege_type
är en Behörighetstyp för Hive-metaarkiv -
securable_object
är ett skyddsbart objekt i Hive-metaarkivet -
principal
är en användare, tjänstens huvudnamn (representeras av dess applicationId-värde) eller grupp. Du måste omsluta användare, tjänstens huvudnamn och gruppnamn med specialtecken i backticks (` `
). Se Huvudnamn.
Om du vill ge alla användare på din arbetsyta behörighet users
till gruppen. Till exempel:
GRANT SELECT ON TABLE <schema-name>.<table-name> TO users
Mer information om hur du hanterar privilegier för objekt i Hive-metaarkivet med SQL-kommandon finns i Privilegier och skyddsbara objekt i Hive-metaarkivet.
Du kan också hantera åtkomstkontroll för tabeller i en helt automatiserad konfiguration med databricks Terraform-providern och databricks_sql_permissions.
Objektägarskap
När tabellåtkomstkontroll är aktiverad i ett kluster eller SQL-lager blir en användare som skapar ett schema, en tabell, en vy eller en funktion dess ägare. Ägaren beviljas alla privilegier och kan bevilja behörigheter till andra användare.
Grupper kan äga objekt, i vilket fall alla medlemmar i den gruppen betraktas som ägare.
Antingen kan ägaren till ett objekt eller en arbetsyteadministratör överföra ägarskapet för ett objekt med hjälp av följande kommando:
ALTER <object> OWNER TO `<user-name>@<user-domain>.com`
Kommentar
När tabellåtkomstkontroll är inaktiverad i ett kluster eller SQL-lager registreras inte ägare när ett schema, en tabell eller en vy skapas. En arbetsyteadministratör måste tilldela en ägare till objektet med kommandot ALTER <object> OWNER TO
.
Skyddsbara objekt i Hive-metaarkivet
De skyddsbara objekten är:
CATALOG
: styr åtkomsten till hela datakatalogen.-
SCHEMA
: styr åtkomsten till ett schema.-
TABLE
: styr åtkomsten till en hanterad eller extern tabell. -
VIEW
: styr åtkomsten till SQL-vyer. -
FUNCTION
: styr åtkomsten till en namngiven funktion.
-
-
ANONYMOUS FUNCTION
: styr åtkomsten till anonyma eller tillfälliga funktioner.Kommentar
ANONYMOUS FUNCTION
objekt stöds inte i Databricks SQL.ANY FILE
: styr åtkomsten till det underliggande filsystemet.Varning
Användare som beviljas åtkomst till
ANY FILE
kan kringgå begränsningarna för katalogen, scheman, tabeller och vyer genom att läsa direkt från filsystemet.
Kommentar
Behörigheter för globala och lokala tillfälliga vyer stöds inte. Lokala tillfälliga vyer visas endast inom samma session, och vyer som skapats i global_temp
schemat är synliga för alla användare som delar ett kluster eller SQL-lager. Behörigheter för underliggande tabeller och vyer som refereras till av temporära vyer tillämpas dock.
Behörigheter som du kan bevilja för Hive-metaarkivobjekt
-
SELECT
: ger läsåtkomst till ett objekt. -
CREATE
: ger möjlighet att skapa ett objekt (till exempel en tabell i ett schema). -
MODIFY
: ger möjlighet att lägga till, ta bort och ändra data till eller från ett objekt. -
USAGE
: ger inga funktioner, men är ett ytterligare krav för att utföra någon åtgärd på ett schemaobjekt. -
READ_METADATA
: ger möjlighet att visa ett objekt och dess metadata. -
CREATE_NAMED_FUNCTION
: ger möjlighet att skapa en namngiven UDF i en befintlig katalog eller ett befintligt schema. -
MODIFY_CLASSPATH
: ger möjlighet att lägga till filer i Spark-klasssökvägen. -
ALL PRIVILEGES
: ger alla privilegier (översätts till alla ovanstående privilegier).
Kommentar
Behörigheten MODIFY_CLASSPATH
stöds inte i Databricks SQL.
USAGE
privilegium
Om du vill utföra en åtgärd på ett schemaobjekt i Hive-metaarkivet måste en användare ha behörighet för USAGE
schemat utöver behörigheten att utföra åtgärden. Något av följande uppfyller USAGE
kravet:
- Vara administratör för arbetsytan
- Ha behörigheten
USAGE
för schemat eller vara i en grupp som har behörighetenUSAGE
för schemat - Ha behörigheten
USAGE
CATALOG
på eller vara i en grupp som har behörighetenUSAGE
- Vara ägare till schemat eller vara i en grupp som äger schemat
Även ägaren av ett objekt i ett schema måste ha behörigheten USAGE
för att kunna använda det.
Behörighetshierarki
När tabellåtkomstkontroll är aktiverad på arbetsytan och i alla kluster är SQL-objekt i Azure Databricks hierarkiska och privilegier ärvs nedåt. Det innebär att bevilja eller neka en behörighet CATALOG
för automatiskt beviljar eller nekar behörigheten till alla scheman i katalogen. På samma sätt ärvs behörigheter som beviljas för ett schemaobjekt av alla objekt i schemat. Det här mönstret gäller för alla skyddsbara objekt.
Om du nekar en användarbehörighet i en tabell kan användaren inte se tabellen genom att försöka lista alla tabeller i schemat. Om du nekar en användare behörighet i ett schema kan användaren inte se att schemat finns genom att försöka lista alla scheman i katalogen.
Funktioner för dynamisk vy
Azure Databricks innehåller två användarfunktioner som gör att du kan uttrycka behörigheter på kolumn- och radnivå dynamiskt i brödtexten i en vydefinition som hanteras av Hive-metaarkivet.
-
current_user()
: returnera det aktuella användarnamnet. -
is_member()
: avgör om den aktuella användaren är medlem i en specifik Azure Databricks-grupp på arbetsytans nivå.
I följande exempel kombineras båda funktionerna för att avgöra om en användare har rätt gruppmedlemskap:
-- 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
Behörigheter på kolumnnivå
Du kan använda dynamiska vyer för att begränsa vilka kolumner en viss grupp eller användare kan se. Tänk dig följande exempel där endast användare som tillhör auditors
gruppen kan se e-postadresser från sales_raw
tabellen. Vid analystid ersätter Spark -instruktionen CASE
med antingen literalen 'REDACTED'
eller kolumnen email
. Det här beteendet möjliggör alla vanliga prestandaoptimeringar som tillhandahålls av 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
Behörigheter på radnivå
Med dynamiska vyer kan du ange behörigheter ned till rad- eller fältnivå. Tänk på följande exempel, där endast användare som tillhör managers
gruppen kan se transaktionsbelopp (total
kolumn) som är större än 1 000 000,00 USD:
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;
Datamaskning
Som du ser i föregående exempel kan du implementera maskering på kolumnnivå för att förhindra att användare ser specifika kolumndata om de inte är i rätt grupp. Eftersom dessa vyer är Standard Spark SQL kan du utföra mer avancerade typer av maskering med mer komplexa SQL-uttryck. I följande exempel kan alla användare utföra analys på e-postdomäner, men låter medlemmar i auditors
gruppen se användarnas fullständiga e-postadresser.
-- 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