Een dynamische weergave maken
In Unity Catalog kunt u dynamische weergaven gebruiken om gedetailleerd toegangsbeheer te configureren, waaronder:
- Beveiliging op het niveau van kolommen of rijen.
- Gegevensmaskering.
Unity Catalog introduceert de volgende functies, waarmee u dynamisch kunt beperken welke gebruikers toegang hebben tot een rij, kolom of 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 weergaven voor 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 weergaven van Unity Catalog-gegevens, omdat het het groepslidmaatschap op accountniveau niet evalueert.
Azure Databricks raadt u aan gebruikers niet de mogelijkheid te geven om de tabellen en weergaven te lezen waarnaar in de weergave wordt verwezen.
In de volgende voorbeelden ziet u hoe u dynamische weergaven maakt in Unity Catalog.
Voordat u begint
Voor het maken of lezen van dynamische weergaven zijn de vereisten hetzelfde als die voor standaardweergaven, 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 weergaven niet lezen met behulp van rekenkracht van één gebruiker in 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 weergaven ondersteunt, wordt uitgevoerd op serverloze berekeningen. Er worden dus mogelijk kosten in rekening gebracht voor serverloze rekenresources wanneer u rekenkracht van één gebruiker gebruikt om dynamische weergaven te lezen. Zie Gedetailleerd toegangsbeheer voor rekenkracht van één gebruiker.
Machtigingen op kolomniveau
Met een dynamische weergave kunt u de kolommen beperken die een specifieke gebruiker of groep kan openen. In het volgende voorbeeld hebben alleen leden van de auditors
groep toegang tot e-mailadressen uit de sales_raw
tabel. Tijdens de queryanalyse vervangt Apache Spark de CASE
-instructie door de letterlijke tekenreeks REDACTED
of de werkelijke inhoud van de kolom met e-mailadressen. Andere kolommen worden normaal 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 weergaven 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