Een dynamische weergave maken
In Unity Catalogkunt u dynamische views gebruiken om gedetailleerd toegangsbeheer te configureren, waaronder:
- Beveiliging op het niveau van columns of rijen.
- Gegevensmaskering.
Unity Catalog introduceert de volgende functies, waarmee u dynamisch kunt limit welke gebruikers toegang hebben tot een rij, columnof record in een weergave:
-
current_user()
: retourneert het e-mailadres van de huidige gebruiker. -
is_account_group_member()
: retourneertTRUE
als de huidige gebruiker lid is van een specifieke groep op accountniveau. Aanbevolen voor gebruik in dynamische views tegen Unity Catalog-gegevens. -
is_member()
: retourneertTRUE
als de huidige gebruiker lid is van een specifieke groep op werkruimteniveau. Deze functie is beschikbaar voor compatibiliteit met de bestaande Hive-metastore. Vermijd het gebruik ervan met views tegen Unity Catalog-gegevens, omdat het groepslidmaatschap op accountniveau niet evalueert.
Azure Databricks raadt aan dat u gebruikers niet grant de mogelijkheid om de tables te lezen en views waarnaar in de weergave wordt verwezen.
In de volgende voorbeelden ziet u hoe u dynamische views maakt in Unity Catalog.
Voordat u begint
Voor het maken of lezen van dynamische viewszijn de vereisten hetzelfde als die voor standaard-views, met uitzondering van rekenvereisten. U moet een van de volgende rekenresources gebruiken:
Een SQL Warehouse.
Berekenen met de modus voor gedeelde toegang.
Compute met de modus voor toegang van één gebruiker in Databricks Runtime 15.4 LTS of hoger.
U kunt dynamische views niet lezen met behulp van de single user compute-mogelijkheid op Databricks Runtime 15.3 of lager.
Als u wilt profiteren van het filteren van gegevens in Databricks Runtime 15.4 LTS en hoger, moet u ook controleren of uw werkruimte is ingeschakeld voor serverloze compute-, omdat de functionaliteit voor gegevensfiltering die dynamische views ondersteunt, wordt uitgevoerd op serverloze berekeningen. Daarom worden er mogelijk kosten in rekening gebracht voor serverloze rekenresources wanneer u rekenkracht van één gebruiker gebruikt om dynamische viewste lezen. Zie Gedetailleerd toegangsbeheer voor rekenkracht van één gebruiker.
Column-niveau machtigingen
Met een dynamische weergave kunt u limit de columns die een specifieke gebruiker of groep kan benaderen. In het volgende voorbeeld hebben alleen leden van de auditors
groep toegang tot e-mailadressen uit de sales_raw
table. Tijdens de queryanalyse vervangt Apache Spark de CASE
-instructie door de letterlijke tekenreeks REDACTED
of de werkelijke inhoud van het e-mailadres column. Andere columns worden zoals gebruikelijk geretourneerd. Deze strategie heeft geen negatieve invloed op de queryprestaties.
-- 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
Machtigingen op rijniveau
Met een dynamische weergave kunt u machtigingen naar het rij- of veldniveau opgeven. In het volgende voorbeeld kunnen alleen leden van de managers
groep transactiebedragen bekijken wanneer ze $ 1.000.000 overschrijden. Overeenkomende resultaten worden uitgefilterd voor andere gebruikers.
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;
Gegevensmaskering
Omdat views in Unity Catalog Spark SQL gebruiken, kunt u geavanceerde gegevensmaskering implementeren met behulp van complexere SQL-expressies en reguliere expressies. In het volgende voorbeeld kunnen alle gebruikers e-maildomeinen analyseren, maar alleen leden van de auditors
groep kunnen het volledige e-mailadres van een gebruiker bekijken.
-- 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