Delen via


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(): retourneert TRUE als de huidige gebruiker lid is van een specifieke groep op accountniveau. Aanbevolen voor gebruik in dynamische views tegen 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 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_rawtable. 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