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ückis_account_group_member()
: GibtTRUE
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()
: GibtTRUE
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