Freigeben über


Erstellen einer dynamischen Ansicht

In Unity Catalog können Sie dynamische Ansichten verwenden, um eine differenzierte Zugriffssteuerung zu konfigurieren, die unter anderem Folgendes ermöglicht:

  • Sicherheit auf Spalten- oder Zeilenebene
  • Datenmaskierung

Unity Catalog führt die folgenden Funktionen ein, mit denen Sie dynamisch einschränken können, welche Benutzer*innen auf eine Zeile, Spalte oder einen Datensatz in einer Ansicht zugreifen können:

  • current_user(): Gibt die E-Mail-Adresse des oder der aktuellen Benutzer*in zurück
  • is_account_group_member(): Gibt TRUE zurück, wenn der oder die aktuelle Benutzer*in Mitglied einer bestimmten Gruppe auf Kontoebene ist Diese Option wird empfohlen, wenn dynamische Ansichten mit Unity Catalog-Daten verwendet werden.
  • is_member(): Gibt TRUE zurück, wenn der oder die aktuelle Benutzer*in Mitglied einer bestimmten Gruppe auf Arbeitsbereichebene ist Diese Funktion soll für Kompatibilität mit dem vorhandenen Hive-Metastore sorgen. Sie sollten sie nicht für Ansichten mit Unity Catalog-Daten verwenden, da sie die Gruppenmitgliedschaft nicht auf Kontoebene auswertet.

Azure Databricks empfiehlt, Benutzern nicht die Möglichkeit zu gewähren, die Tabellen und Ansichten zu lesen, auf die in der Ansicht verwiesen wird.

Die folgenden Beispiele veranschaulichen, wie dynamische Ansichten in Unity Catalog erstellt werden.

Voraussetzungen

Um dynamische Ansichten zu erstellen oder zu lesen, entsprechen die Anforderungen denen für Standardansichten, mit Ausnahme der Compute-Anforderungen. Sie müssen eine der folgenden Computeressourcen verwenden:

  • Ein SQL-Warehouse

  • Compute mit gemeinsamem Zugriffsmodus.

  • Compute with single user access mode on Databricks Runtime 15.4 LTS or above.

    Sie können dynamische Ansichten nicht mit einzelnen Benutzern lesen, die auf Databricks Runtime 15.3 oder darunter berechnet werden.

    Um die in Databricks Runtime 15.4 LTS und höher bereitgestellten Datenfilter nutzen zu können, müssen Sie auch überprüfen, ob Ihr Arbeitsbereich für serverloses Computingaktiviert ist, da die Datenfilterfunktion, die dynamische Ansichten unterstützt, auf serverlosem Computing ausgeführt wird. Sie können daher serverlose Computeressourcen in Rechnung stellen, wenn Sie einen einzelnen Benutzer zum Lesen dynamischer Ansichten verwenden. Weitere Informationen finden Sie unter Feinkornierte Zugriffssteuerung für die Berechnung einzelner Benutzer.

Berechtigungen auf Spaltenebene

Mit einer dynamischen Ansicht können Sie die Spalten einschränken, auf die ein*e bestimmte*r Benutzer*in oder eine bestimmte Gruppe zugreifen kann. Im folgenden Beispiel können nur Mitglieder der Gruppe auditors über die Tabelle sales_raw auf E-Mail-Adressen zugreifen. Während der Abfrageanalyse ersetzt Apache Spark die CASE-Anweisung entweder durch die Literalzeichenfolge REDACTED oder den tatsächlichen Inhalt der Spalte für E-Mail-Adressen. Andere Spalten werden wie gewohnt zurückgegeben. Diese Strategie hat keine negativen Auswirkungen auf die Abfrageleistung.

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

Zeilenspezifische Berechtigungen

Mit einer dynamischen Ansicht können Sie Berechtigungen bis auf Zeilen- oder Feldebene festlegen. Im folgenden Beispiel können nur Mitglieder der Gruppe managers Transaktionsbeträge anzeigen, wenn diese 1.000.000 USD überschreiten. Übereinstimmende Ergebnisse werden für andere Benutzer*innen herausgefiltert.

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;

Datenmaskierung

Da Ansichten in Unity Catalog Spark SQL verwenden, können Sie die erweiterte Datenmaskierung implementieren, indem Sie komplexere SQL-Ausdrücke und reguläre Ausdrücke verwenden. Im folgenden Beispiel können alle Benutzer*innen E-Mail-Domänen analysieren, aber nur Mitglieder der Gruppe auditors können die ganze E-Mail-Adresse eines oder einer Benutzer*in anzeigen.

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