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 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