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 voor Unity Catalog-gegevens, omdat 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 berekeningen, 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 als 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