Delen via


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(): retourneert TRUE als de huidige gebruiker lid is van een specifieke groep op accountniveau. Aanbevolen voor gebruik in dynamische weergaven voor Unity Catalog-gegevens.
  • is_member(): retourneert TRUE 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