Behörigheter för dataobjekt
Viktigt
Den här funktionen finns som allmänt tillgänglig förhandsversion.
Med Azure Databricks data styrnings modell kan du program mässigt bevilja, neka och återkalla åtkomst till dina data från Spark SQL. Med den här modellen kan du kontrol lera åtkomst till skydds bara objekt som tabeller, databaser, vyer och funktioner. Det möjliggör också detaljerad åtkomst kontroll (till exempel en viss del av en tabell) genom att ange privilegier för härledda vyer som skapats från valfria frågor. Azure Databricks SQL Query Analyzer tillämpar dessa principer för åtkomst kontroll vid körning i kluster och SQL-slutpunkter med aktive rad tabell åtkomst kontroll.
Den här artikeln beskriver de privilegier, objekt och ägarskaps regler som utgör Azure Databricks data styrnings modell. Det beskriver också hur du beviljar, nekar och återkallar objekt behörigheter.
Krav
Kraven för att hantera objekt behörigheter beror på din miljö:
Azure Databricks-arbetsyta
- En administratör måste Aktivera och tillämpa tabell åtkomst kontroll för arbets ytan.
- Klustret måste vara aktiverat för tabell åtkomst kontroll.
Azure Databricks SQL-analys
Se krav för snabb start av administratör.
Data styrnings modell
I det här avsnittet beskrivs Azure Databricks data styrnings modell. Åtkomst till data objekt styrs av privilegier.
Behörigheter
SELECT
: ger Läs behörighet till ett objekt.CREATE
: ger möjlighet att skapa ett objekt (till exempel en tabell i en databas).MODIFY
: ger möjlighet att lägga till, ta bort och ändra data till eller från ett objekt.USAGE
: ger inga möjligheter, men är ett ytterligare krav för att utföra åtgärder på ett databas objekt.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 databas.MODIFY_CLASSPATH
: ger möjlighet att lägga till filer i klass Sök vägen för Spark.ALL PRIVILEGES
: ger alla behörigheter (översätts till alla privilegier ovan).
USAGE
grupperna
Om du vill utföra en åtgärd på ett databas objekt måste användaren ha behörighet för den USAGE
databasen förutom behörigheten för att utföra åtgärden. Något av följande uppfyller USAGE
kravet:
- Vara administratör
- Ha
USAGE
behörighet för databasen eller vara i en grupp som harUSAGE
behörighet för databasen - Ha
USAGE
behörighetenCATALOG
eller vara i en grupp som harUSAGE
behörigheten - Vara ägare till databasen eller vara i en grupp som äger databasen
Även om ägaren till ett objekt i en databas måste ha USAGE
behörighet för att kunna använda det.
En administratör kan till exempel definiera en finance
grupp och en databas som accounting
de kan använda.
Om du vill konfigurera en databas som bara ekonomi teamet kan använda och dela, skulle en administratör göra följande:
CREATE DATABASE accounting;
GRANT USAGE ON DATABASE accounting TO finance;
GRANT CREATE ON DATABASE accounting TO finance;
Med dessa behörigheter kan medlemmar i finance
gruppen skapa tabeller och vyer i accounting
databasen, men de kan inte dela dessa tabeller eller vyer med alla objekt som inte har någon USAGE
accounting
databas.
Beteende för Azure Databricks arbets yta och Databricks Runtime version
- Kluster som kör Databricks Runtime 7,3 LTS och senare genomdriver
USAGE
privilegiet. - Kluster som kör Databricks Runtime 7,2 och tidigare upprätthåller inte
USAGE
privilegiet. - För att se till att befintliga arbets belastningar är oförändrade i arbets ytor som använde Table Access Control innan har
USAGE
introducerats hade duUSAGE
behörigheten förCATALOG
users
gruppen. Om du vill dra nytta avUSAGE
behörigheten måste du köraREVOKE USAGE ON CATALOG FROM users
och sedanGRANT USAGE ...
efter behov.
Behörighets hierarki
SQL-objekt i Azure Databricks hierarkier och behörigheter ärvs. Det innebär att beviljande eller nekar en behörighet för det CATALOG
automatiskt tilldelar eller nekar behörigheten till alla databaser i katalogen. På samma sätt ärvs behörigheter som beviljats för ett DATABASE
objekt av alla objekt i databasen.
Objekt
Behörigheter gäller för följande typer av objekt:
CATALOG
: styr åtkomsten till hela data katalogen.DATABASE
: styr åtkomst till en databas.TABLE
: styr åtkomst till en hanterad eller extern tabell.VIEW
: styr åtkomst till SQL-vyer.FUNCTION
: styr åtkomst till en namngiven funktion.
ANONYMOUS FUNCTION
: styr åtkomst till anonyma eller temporära funktioner.ANY FILE
: styr åtkomsten till det underliggande fil systemet.Anteckning
Användare med den här behörigheten kan kringgå begränsningarna som har lagts till i tabeller genom att läsa från fil systemet direkt.
Objektägarskap
När tabell åtkomst kontrollen är aktive rad på ett kluster eller SQL-slutpunkt blir en användare som skapar en databas, tabell, vy eller funktion dess ägare. Ägaren beviljas alla behörigheter och kan bevilja behörigheter till andra användare.
Grupper kan äga objekt, vilket innebär att alla medlemmar i gruppen betraktas som ägare.
Ägarskapet bestämmer om du kan bevilja behörigheter för härledda objekt till andra användare.
Anta till exempel att användare A äger tabell T och beviljar användare B- SELECT
behörighet för tabell t. Även om användare B kan välja från tabell T kan användare B inte bevilja SELECT
behörighet för tabell t till användare C, eftersom användare A fortfarande är ägare av underliggande tabell t. Dessutom kan användare B inte kringgå den här begränsningen genom att skapa en vy V i tabell T och bevilja behörighet för den vyn till användare C. När Azure Databricks kontrollerar behörigheter för användare C för att komma åt vyn V, kontrollerar den också att ägaren av V och den underliggande tabellen är densamma. Om ägarna inte är samma måste användare C också ha SELECT
behörighet för underliggande tabell T.
När tabell åtkomst kontrollen är inaktive rad i ett kluster registreras ingen ägare när en databas, tabell, vy eller funktion skapas. Om du vill testa om ett objekt har en ägare kör du SHOW GRANT ON <object-name>
.
Om du inte ser någon post med ActionType OWN
, har objektet ingen ägare.
Tilldela ägare till objekt
En administratör kan tilldela en ägare till ett objekt med hjälp av ALTER <object> OWNER TO `<user-name>@<user-domain>.com`
kommandot:
ALTER DATABASE <database-name> OWNER TO `<user-name>@<user-domain>.com`
ALTER TABLE <table-name> OWNER TO `group_name`
ALTER VIEW <view-name> OWNER TO `<user-name>@<user-domain>.com`
Användare och grupper
Administratörer och ägare kan bevilja behörigheter till användare och grupper.
Varje användare identifieras unikt med sitt användar namn i Azure Databricks (som vanligt vis mappas till sin e-postadress).
Alla användare är implicit en del av gruppen "alla användare", som visas som users
i SQL.
Anteckning
Du måste ange användar specifikationer i baktick (' '), inte enkla citat tecken ().
Åtgärder och behörigheter
I Azure Databricks får administratörs användare möjlighet att göra allt. De kan bevilja, återkalla eller neka behörigheter för alla objekt, oavsett objektets ägare. De kan också ändra ägaren till ett objekt, vilket kan vara nödvändigt för objekt som skapats i icke-tabell åtkomst till kontrollerade kluster. Ägare av ett objekt kan utföra alla åtgärder och även bevilja behörighet till andra objekt. Det enda undantaget är om objektet finns i en databas. Om du vill göra något med det objektet måste användaren också ha USAGE
på den databasen.
I följande tabell mappas SQL-åtgärder till de behörigheter som krävs för att utföra åtgärden.
Anteckning
- Vilken plats som helst där en behörighet för en tabell, vy eller funktion krävs,
USAGE
krävs också för databasen den finns i. - En sökväg kan också refereras till på en plats där en tabell refereras till i ett kommando. I dessa instanser
SELECT
ellerMODIFY
krävs iANY_FILE
stället förUSAGE
på databasen och en annan behörighet för tabellen. - Objekt ägarskapet visas här som
OWN
behörighet.
Åtgärd | Behörigheter som krävs |
---|---|
Kopiera | Möjlighet att SELECT från den tabell som klonas, CREATE på-databasen och MODIFY om en tabell byts ut. |
KOPIERA TILL | SELECT vid ANY_FILE kopiering från en sökväg, MODIFY i den tabell som kopieras till. |
SKAPA BLOOMFILTER-INDEX | OWN i tabellen som indexeras. |
SKAPA DATABAS | CREATE på CATALOG . |
CREATE TABLE | Antingen OWN eller både USAGE och CREATE på-databasen. |
CREATE VIEW | Antingen OWN eller både USAGE och CREATE på-databasen. |
CREATE FUNCTION | Antingen OWN eller USAGE och CREATE_NAMED_FUNCTION på-databasen. Om en resurs anges måste du MODIFY_CLASSPATH också ange den CATALOG . |
ALTER DATABASE | OWN på-databasen. |
ALTER TABLE | Vanligt vis OWN i tabellen. MODIFY Om du bara lägger till eller tar bort partitioner. |
ALTER VIEW | OWN i vyn. |
SLÄPP BLOOMFILTER-INDEX | OWN i tabellen. |
DROP DATABASE | OWN på-databasen. |
DROP TABLE | OWN i tabellen. |
DROP VIEW | OWN i vyn. |
DROP FUNCTION | OWN i funktionen. |
EXPLAIN | READ_METADATA i tabeller och vyer. |
DESCRIBE TABLE | READ_METADATA i tabellen. |
BESKRIV HISTORIK | OWN i tabellen. |
SELECT | SELECT i tabellen. |
INSERT | MODIFY i tabellen. |
ÅTERSTÄLL TABELL | MODIFY i tabellen. |
UPPDATERA | MODIFY i tabellen. |
SAMMANFOGA TILL | MODIFY i tabellen. |
TA BORT FRÅN | MODIFY i tabellen. |
TRUNCATE TABLE | MODIFY i tabellen. |
OPTIMERA | MODIFY i tabellen. |
VACUUM | MODIFY i tabellen. |
REPARATIONS TABELL FÖR FSCK | MODIFY i tabellen. |
MSCK | OWN i tabellen. |
GRANT | OWN på objektet. |
SHOW GRANT | OWN på objektet. |
DENY | OWN på objektet. |
REVOKE | OWN på objektet. |
Viktigt
När du använder Table Access Control DROP TABLE
är uttryck Skift läges känsliga. Om ett tabell namn är gemener och DROP TABLE
refererar till tabell namnet med hjälp av blandade eller versaler, DROP TABLE
kommer instruktionen att Miss Miss läge.
Hantera objekt behörigheter
Du kan använda GRANT
åtgärderna,,, DENY
REVOKE
MSCK
och SHOW GRANT
för att hantera objekt behörigheter.
Anteckning
En ägare eller en administratör av ett objekt kan utföra
GRANT
,DENY
,REVOKE
och-SHOW GRANT
åtgärder. En administratör kan dock inte Neka behörighet till eller återkalla behörigheter från en ägare.Ett huvud konto som inte är en ägare eller administratör kan bara utföra en åtgärd om behörigheten som krävs har beviljats.
Om du vill bevilja, neka eller återkalla en behörighet för alla användare, anger du nyckelordet
users
efterTO
. Exempel:GRANT SELECT ON ANY FILE TO users
Exempel
GRANT SELECT ON DATABASE <database-name> TO `<user>@<domain-name>`
GRANT SELECT ON ANONYMOUS FUNCTION TO `<user>@<domain-name>`
GRANT SELECT ON ANY FILE TO `<user>@<domain-name>`
SHOW GRANT `<user>@<domain-name>` ON DATABASE <database-name>
DENY SELECT ON <table-name> TO `<user>@<domain-name>`
REVOKE ALL PRIVILEGES ON DATABASE default FROM `<user>@<domain-name>`
REVOKE SELECT ON <table-name> FROM `<user>@<domain-name>`
GRANT SELECT ON ANY FILE TO users
Funktioner för dynamisk vy
Azure Databricks innehåller två användar funktioner som gör att du kan uttrycka behörigheter för kolumn-och rad nivåer dynamiskt i bröd texten i en vydefinition.
current_user()
: returnera det aktuella användar namnet.is_member()
: kontrol lera om den aktuella användaren är medlem i en angiven Azure Databricks grupp.
Anteckning
Tillgängligt i Databricks Runtime 7,3 LTS och senare. Om du vill använda dessa funktioner i Databricks Runtime 7,3-LTS måste du dock ställa in Spark-konfigurationen spark.databricks.userInfoFunctions.enabled true
.
Tänk på följande exempel, som kombinerar båda funktionerna för att avgöra om en användare har rätt grupp medlemskap:
-- 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
Att tillåta administratörer att ställa in detaljerade privilegier för flera användare och grupper i en enda vy är både lättfattliga programspecifika och kraftfulla, samtidigt som du sparar på administrations kostnader.
Behörigheter på kolumn nivå
Via dynamiska vyer är det enkelt att begränsa vilka kolumner en speciell grupp eller användare kan se. Tänk på följande exempel där endast användare som tillhör gruppen kan auditors
se e-postadresser från sales_raw
tabellen. Vid tidpunkten för analys av Spark ersätts CASE
instruktionen med antingen literalen 'REDACTED'
eller kolumnen email
. Det här beteendet gör det möjligt för alla vanliga prestanda optimeringar från 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_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 till rad-eller fält nivån. Tänk på följande exempel där endast användare som tillhör managers
gruppen kan se transaktions belopp (kolumn) som är total
större än $1 000 000,00:
CREATE VIEW sales_redacted AS
SELECT
user_id,
country,
product,
total
FROM sales_raw
WHERE
CASE
WHEN is_member('managers') THEN TRUE
ELSE total <= 1000000
END;
Datamaskning
Som du ser i föregående exempel kan du implementera maskning på kolumn nivå för att förhindra att användare ser vissa kolumn data om de inte finns i rätt grupp. Eftersom dessa vyer är standard Spark SQL kan du göra mer avancerade typer av maskning med mer komplexa SQL-uttryck. I följande exempel kan alla användare utföra analyser av e-postdomäner, men medlemmarna i auditors
gruppen kan 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_member('auditors') THEN email
ELSE regexp_extract(email, '^.*@(.*)$', 1)
END
FROM sales_raw
Vanliga frågor och svar (FAQ)
Hur gör jag för att bevilja, neka eller återkalla en behörighet för alla användare
Ange nyckelordet users
efter TO
eller FROM
. Till exempel:
GRANT SELECT ON TABLE database.table TO users
Jag har skapat ett objekt, men nu kan jag inte fråga, släppa eller ändra det.
Det här felet kan inträffa eftersom du har skapat objektet i ett kluster eller en SQL-slutpunkt utan att aktivera åtkomst kontroll för tabeller. När tabell åtkomst kontrollen är inaktive rad på ett kluster eller SQL-slutpunkt registreras inte ägare när en databas, tabell eller vy skapas. En administratör måste tilldela en ägare till objektet med hjälp av följande kommando:
ALTER [DATABASE | TABLE | VIEW] <object-name> OWNER TO `<user-name>@<user-domain>.com`;
Hur gör jag för att bevilja du behörigheter för globala och lokala temporära vyer?
Behörigheter för globala och lokala temporära vyer stöds inte. Lokala temporära vyer visas bara inom samma session och vyer som skapas i global_temp
databasen är synliga för alla användare som delar ett kluster eller SQL-slutpunkt. Behörigheter för de underliggande tabellerna och vyer som refereras till av tillfälliga vyer tillämpas dock.
Hur gör jag för att bevilja du behörighet för en användare eller grupp på flera tabeller samtidigt?
En Grant-, Deny-eller REVOKE-instruktion kan endast tillämpas på ett objekt i taget. Det rekommenderade sättet att ordna och bevilja behörigheter för flera tabeller till ett objekt är via-databaser. Beviljande av en huvud SELECT
behörighet för en databas ger implicit SELECT
behörighet till alla tabeller och vyer i databasen. Om en databas D till exempel har tabellerna T1 och T2, och en administratör utfärdar följande GRANT
kommando:
GRANT USAGE, SELECT ON DATABASE D TO `<user>@<domain-name>`
Huvudobjektet <user>@<domain-name>
kan välja bland tabellerna T1 och T2, samt alla tabeller och vyer som skapats i databasen D i framtiden.
Hur gör jag för att bevilja du användar behörighet för alla tabeller utom en?
Du beviljar SELECT
behörighet till databasen och nekar sedan SELECT
behörighet för den speciella tabell som du vill begränsa åtkomsten till.
GRANT USAGE, SELECT ON DATABASE D TO `<user>@<domain-name>`
DENY SELECT ON TABLE D.T TO `<user>@<domain-name>`
Huvudobjektet <user>@<domain-name>
kan välja från alla tabeller i D utom D.T.
En användare har SELECT
behörighet för en vy av tabell T, men när användaren försöker SELECT
från den vyn får de ett fel meddelande User does not have privilege SELECT on table
.
Detta vanliga fel kan bero på någon av följande orsaker:
- Table T har ingen registrerad ägare eftersom den skapades med ett kluster eller en SQL-slutpunkt för vilken tabell åtkomst kontroll har inaktiverats.
- Beviljad behörighet för
SELECT
en vy av tabell t är inte ägare av tabell t eller också har användaren inte heller Select-SELECT
behörighet för tabell t.
Anta att det finns en tabell som ägs av A. En som äger vyn v1 på T och B äger View v2 på T.
- En användare kan välja v1 när en har beviljat
SELECT
behörigheter för Visa v1. - En användare kan välja på v2 När en har beviljat
SELECT
behörigheter för tabell T och B har beviljatSELECT
behörigheter på v2.
Enligt beskrivningen i avsnittet objekt ägarskap ser dessa villkor till att endast ägaren av ett objekt kan ge andra användare åtkomst till objektet.
Jag försökte köra sc.parallelize
på ett kluster med aktiverat tabell åtkomst kontroll och det fungerar inte.
I kluster med aktiverat åtkomst kontroll för tabeller kan du bara använda Spark SQL och python DataFrame-API: er. RDD-API: et tillåts inte av säkerhets skäl eftersom Azure Databricks inte har möjlighet att inspektera och auktorisera kod i en RDD.