Dela via


Skapa en dynamisk vy

I Unity Catalog kan du använda dynamiska vyer för att konfigurera detaljerad åtkomstkontroll, inklusive:

  • Säkerhet på kolumn- eller radnivå.
  • Datamaskering.

Unity Catalog introducerar följande funktioner som gör att du dynamiskt kan begränsa vilka användare som kan komma åt en rad, kolumn eller post i en vy:

  • current_user(): Returnerar den aktuella användarens e-postadress.
  • is_account_group_member(): Returnerar TRUE om den aktuella användaren är medlem i en specifik grupp på kontonivå. Rekommenderas för användning i dynamiska vyer mot Unity Catalog-data.
  • is_member(): Returnerar TRUE om den aktuella användaren är medlem i en specifik grupp på arbetsytenivå. Den här funktionen tillhandahålls för kompatibilitet med det befintliga Hive-metaarkivet. Undvik att använda den med vyer mot Unity Catalog-data eftersom den inte utvärderar gruppmedlemskap på kontonivå.

Azure Databricks rekommenderar att du inte ger användarna möjlighet att läsa tabeller och vyer som refereras i vyn.

Följande exempel visar hur du skapar dynamiska vyer i Unity Catalog.

Innan du börjar

För att skapa eller läsa dynamiska vyer är kraven desamma som för standardvyer, förutom beräkningskrav. Du måste använda någon av följande beräkningsresurser:

  • Ett SQL-lager.
  • Beräkning med läget för delad åtkomst.
  • Beräkning med åtkomstläge för en användare på Databricks Runtime 15.4 LTS eller senare.

Du kan inte läsa dynamiska vyer med enanvändarberäkning på Databricks Runtime 15.3 eller lägre.

Om du vill dra nytta av datafiltreringen som anges i Databricks Runtime 15.4 LTS och senare måste du också kontrollera att din arbetsyta är aktiverad för serverlös beräkning, eftersom datafiltreringsfunktionen som stöder dynamiska vyer körs på serverlös beräkning. Du kan därför debiteras för serverlösa beräkningsresurser när du använder beräkning med en användare för att läsa dynamiska vyer. Se Detaljerad åtkomstkontroll för beräkning av en användare.

Behörigheter på kolumnnivå

Med en dynamisk vy kan du begränsa vilka kolumner en specifik användare eller grupp kan komma åt. I följande exempel kan endast medlemmar i gruppen auditors komma åt e-postadresser från tabellen sales_raw. Vid frågeanalys ersätter Apache Spark CASE-instruktionen med antingen strängen literal REDACTED eller det faktiska innehållet i e-postadresskolumnen. Andra kolumner returneras som vanligt. Den här strategin har ingen negativ inverkan på frågeprestandan.

-- 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_account_group_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

Behörigheter på radnivå

Med en dynamisk vy kan du ange behörigheter ned till rad- eller fältnivå. I följande exempel kan endast medlemmar i managers gruppen visa transaktionsbelopp när de överstiger 1 000 000 USD. Matchande resultat filtreras bort för andra användare.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  country,
  product,
  total
FROM sales_raw
WHERE
  CASE
    WHEN is_account_group_member('managers') THEN TRUE
    ELSE total <= 1000000
  END;

Datamaskning

Eftersom vyer i Unity Catalog använder Spark SQL kan du implementera avancerad datamaskning med hjälp av mer komplexa SQL-uttryck och reguljära uttryck. I följande exempel kan alla användare analysera e-postdomäner, men endast medlemmar i auditors gruppen kan visa en användares hela e-postadress.

-- 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_account_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw