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

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 har USAGE behörighet för databasen
  • Ha USAGE behörigheten CATALOG eller vara i en grupp som har USAGE 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 du USAGE behörigheten för CATALOG users gruppen. Om du vill dra nytta av USAGE behörigheten måste du köra REVOKE USAGE ON CATALOG FROM users och sedan GRANT 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 eller MODIFY krävs i ANY_FILE stället för USAGE 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 CREATECATALOG .
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 efter TO . 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 beviljat SELECT 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.