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()
: ReturnerarTRUE
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()
: ReturnerarTRUE
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