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

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-, MSCK- och 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:

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örigheten USAGE för schemat
  • Ha behörigheten USAGECATALOG på eller vara i en grupp som har behörigheten USAGE
  • 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