Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Lernprogramm wird gezeigt, wie Sie eine Zuordnungstabelle verwenden, um den Zugriff auf Zeilenebene und den Zugriff auf Spaltenebene zu steuern, ohne eine große Anzahl von Gruppen zu verwalten. Eine einzelne Nachschlagetabelle steuert sowohl die Zeilenfilterung als auch die Spaltenmaske. Änderungen des Zugriffs erfordern nur eine Zeilenaktualisierung. Sie müssen keine neuen Gruppen erstellen oder Richtlinien neu schreiben.
In diesem Lernprogramm wird auch die bedingte Maskierung veranschaulicht: PII-Spalten werden je nach Wert einer anderen Spalte in derselben Zeile unterschiedlich maskiert. Die Bestellungen, die als confidential markiert sind, haben ihre personenbezogenen Daten unabhängig von der Sicherheitsstufe des Benutzers vollständig geschwärzt.
Allgemeine Anleitungen zum Zuordnungstabellenentwurf finden Sie unter Verwenden von Zuordnungstabellen zum Erstellen einer Zugriffssteuerungsliste.
Voraussetzungen
- Databricks Runtime 16.4 oder höher oder serverloses Computing.
- Kontoadministrator- oder Arbeitsbereichsadministratorberechtigungen (zum Erstellen von geregelten Tags).
-
MANAGEBerechtigung für den Zielkatalog oder das Zielschema. -
EXECUTEauf den UDFs. - Ein SQL-Notizbuch oder Abfrage-Editor.
Szenario
Ihre Organisation verfügt über Mitarbeiter in vier Regionen (USA Ost, USA West, EU, APAC) und vier Abteilungen. Jeder Benutzer sollte nur die Zeilen sehen, die mit seiner Region und Abteilung übereinstimmen, und PII-Spalten sollten basierend auf zwei Faktoren maskiert werden: der Freigabestufe (full, masked oder none), die in einer Zuordnungstabelle gespeichert ist, und dem order_priority der Bestellung.
Bei einem gruppenbasierten Ansatz benötigen Sie eine Gruppe für jede Regionsabteilungskombination. Sie benötigen beispielsweise 16 Gruppen für vier Regionen und vier Abteilungen. Durch das Hinzufügen von PII-Freigabeebenen verdreifacht sich die Anzahl. Jede neue Region oder Abteilung erfordert neue Gruppen und Richtlinienupdates.
Der Ansatz der Zuordnungstabelle ersetzt dies durch eine einzelne Nachschlagetabelle: eine Zeile pro Benutzer, eine Spalte pro Zugriffsdimension. Um den Zugriff eines Benutzers zu ändern, aktualisieren Sie eine Zeile.
Schritt 1: Erstellen von gesteuerten Tags
Erstellen Sie vor dem Ausführen von SQL die folgenden geregelten Tags in der Benutzeroberfläche des Katalog-Explorers (Katalog>>Governed Tags>Create governed tag):
| Tag-Schlüssel | Zulässige Werte |
|---|---|
region |
(Schlüssel-Tag nur) |
department |
(Schlüssel-Tag nur) |
pii |
name, email |
priority |
(Schlüssel-Tag nur) |
Die Tags region und department teilen der Zeilenfilterrichtlinie mit, welche Spalten an die Filter-UDF übergeben werden sollen. Das pii-Tag teilt den Spaltenmaskierungsrichtlinien mit, welche Spalten zu maskieren sind und welchen PII-Typen sie enthalten. Der priority-Tag ermöglicht es den Spaltenmaskenrichtlinien, den order_priority-Wert an die Masken-UDF zur bedingten Maskierung zu übergeben.
Warnung
Tagdaten werden als Nur-Text gespeichert und können global repliziert werden. Verwenden Sie keine Tagnamen, Werte oder Deskriptoren, die die Sicherheit Ihrer Ressourcen gefährden könnten. Verwenden Sie beispielsweise keine Tagnamen, Werte oder Deskriptoren, die persönliche oder vertrauliche Informationen enthalten.
Schritt 2: Erstellen von Beispieldaten
Erstellen Sie eine Katalog-, Schema- und Auftragstabelle. Die order_priority Spalte steuert die bedingte Maskierung: Bestellungen, die als confidential gekennzeichnet sind, haben ihre personenbezogenen Daten vollständig geschwärzt, auch für Benutzer mit hoher Sicherheitsfreigabe.
CREATE CATALOG IF NOT EXISTS abac_tutorial;
USE CATALOG abac_tutorial;
CREATE SCHEMA IF NOT EXISTS mapping_demo;
USE SCHEMA mapping_demo;
CREATE OR REPLACE TABLE orders (
order_id INT,
customer_name STRING,
customer_email STRING,
sales_region STRING,
dept STRING,
amount DOUBLE,
order_date DATE,
order_priority STRING
);
INSERT INTO orders VALUES
(1, 'Acme Corp', 'orders@acme.com', 'us_east', 'engineering', 50000, '2025-01-15', 'standard'),
(2, 'Beta Inc', 'sales@beta.com', 'us_east', 'sales', 75000, '2025-02-01', 'confidential'),
(3, 'Gamma LLC', 'info@gamma.com', 'us_west', 'engineering', 30000, '2025-01-20', 'standard'),
(4, 'Delta Co', 'deals@delta.com', 'us_west', 'sales', 95000, '2025-03-01', 'confidential'),
(5, 'Epsilon GmbH', 'kontakt@epsilon.de', 'eu', 'engineering', 45000, '2025-02-15', 'standard'),
(6, 'Zeta SA', 'contact@zeta.fr', 'eu', 'sales', 62000, '2025-01-30', 'standard'),
(7, 'Eta Ltd', 'hello@eta.sg', 'apac', 'marketing', 28000, '2025-03-10', 'confidential'),
(8, 'Theta Corp', 'biz@theta.com', 'us_east', 'marketing', 55000, '2025-02-20', 'standard'),
(9, 'Iota KK', 'info@iota.jp', 'apac', 'engineering', 41000, '2025-01-25', 'standard'),
(10, 'Kappa Inc', 'sales@kappa.com', 'us_west', 'marketing', 33000, '2025-03-05', 'standard');
Schritt 3: Anwenden geregelter Tags
Markieren Sie die Spalten, damit ABAC-Richtlinien sie automatisch ermitteln können. Die order_priority Spalte wird mit dem Nur-Schlüssel-Tag priority markiert, sodass die Spaltenformatrichtlinien sie über MATCH COLUMNS die Maske abgleichen und ihren Wert an die UDF-Maske übergeben können.
ALTER TABLE abac_tutorial.mapping_demo.orders
ALTER COLUMN sales_region SET TAGS ('region' = '');
ALTER TABLE abac_tutorial.mapping_demo.orders
ALTER COLUMN dept SET TAGS ('department' = '');
ALTER TABLE abac_tutorial.mapping_demo.orders
ALTER COLUMN customer_name SET TAGS ('pii' = 'name');
ALTER TABLE abac_tutorial.mapping_demo.orders
ALTER COLUMN customer_email SET TAGS ('pii' = 'email');
ALTER TABLE abac_tutorial.mapping_demo.orders
ALTER COLUMN order_priority SET TAGS ('priority' = '');
Schritt 4: Die Zuordnungstabelle erstellen
Anstatt Gruppen für jede Region, Abteilung und Freigabekombination zu erstellen, verwalten Sie eine Tabelle mit einer Zeile pro Benutzer. Die pii_access Spalte steuert, wie PII-Spalten angezeigt werden:
-
full— siehe den tatsächlichen Wert (für Aufträge mit Standardpriorität) -
masked— einen Teilwert wieA***oder z. B.o***@acme.com -
none— siehe***REDACTED***
Die expires_on Spalte legt ein Ablaufdatum für jeden Zugriffseintrag fest. Nach diesem Datum beendet der Zeilenfilter UDF die Übereinstimmung mit dem Eintrag, und der Benutzer verliert im Hintergrund den Zugriff ohne manuelle Sperrung. Dies ist nützlich für Auftragnehmer, temporäre Vereinbarungen zur Datenfreigabe oder zeitlich begrenzte Projekte.
Wenn ein Benutzer Zugriff auf mehrere Regions- und Abteilungskombinationen benötigt, fügen Sie zusätzliche Zeilen hinzu.
Note
Erstellen Sie kleine und einfache Zuordnungstabellen. Jede Abfrage für eine geschützte Tabelle führt den Zeilenfilter und die Spaltenmaske UDFs aus, die wiederum die Zuordnungstabelle abfragen. Große Zuordnungstabellen und komplexe UDF-Logik können sich auf die Abfrageleistung auswirken. Verwenden Sie schmale Schemas und beschränken Sie die UDF-Logik auf einen einzelnen Nachschlagevorgang, soweit möglich.
CREATE OR REPLACE TABLE abac_tutorial.mapping_demo.user_access (
user_email STRING,
region STRING,
department STRING,
pii_access STRING,
expires_on DATE
);
INSERT INTO abac_tutorial.mapping_demo.user_access VALUES
(current_user(), 'us_east', 'engineering', 'masked', '2099-12-31'),
('bob@example.com', 'us_west', 'sales', 'full', '2099-12-31'),
('carol@example.com', 'eu', 'engineering', 'none', '2099-12-31'),
('david@example.com', 'apac', 'marketing', 'masked', '2099-12-31');
Schritt 5: Erstellen des Zeilenfilters UDF
Diese UDF empfängt die sales_region- und dept-Werte einer Zeile (übergeben durch die Richtlinie über den Tagabgleich), sucht den aktuellen Benutzer in der Zuordnungstabelle und gibt TRUE nur dann zurück, wenn ein übereinstimmender Eintrag vorhanden ist und nicht abgelaufen ist. Benutzer, die sich nicht in der Zuordnungstabelle befinden oder deren Zugriff abgelaufen ist, sehen keine Zeilen (nicht geschlossener Entwurf).
CREATE OR REPLACE FUNCTION abac_tutorial.mapping_demo.access_filter(
region_val STRING,
dept_val STRING
)
RETURNS BOOLEAN
RETURN EXISTS (
SELECT 1 FROM abac_tutorial.mapping_demo.user_access
WHERE user_email = current_user()
AND region = region_val
AND department = dept_val
AND expires_on >= current_date()
);
Schritt 6: Spaltenmaske-UDF erstellen
Diese UDF steuert, wie PII-Spalten angezeigt werden. Es sind drei Argumente erforderlich: der Spaltenwert, der PII-Typ ('name' oder 'email') und die Zeile order_priority. Die Maskierungslogik weist zwei Ebenen auf:
-
Ebene 1 (bedingte Maskierung): Wenn
order_priorityconfidentialist, wird die PII unabhängig von der Freigabestufe des Benutzers immer vollständig geschwärzt. -
Layer 2 (Benutzerfreigabe): Bei Standardzeilen überprüft die UDF die Zuordnungstabelle auf die Ebene des
pii_accessBenutzers und wendet die entsprechende Maske an. Wenn ein Benutzer über mehrere Zuordnungstabelleneinträge verfügt (Zugriff auf mehrere Regionen), gilt die höchste Freigabe für alle Zeilen.
CREATE OR REPLACE FUNCTION abac_tutorial.mapping_demo.pii_mask(
val STRING,
pii_type STRING,
order_pri STRING
)
RETURNS STRING
RETURN CASE
WHEN order_pri = 'confidential' THEN '***REDACTED***'
WHEN EXISTS (
SELECT 1 FROM abac_tutorial.mapping_demo.user_access
WHERE user_email = current_user() AND pii_access = 'full'
) THEN val
WHEN EXISTS (
SELECT 1 FROM abac_tutorial.mapping_demo.user_access
WHERE user_email = current_user() AND pii_access = 'masked'
) THEN
CASE pii_type
WHEN 'email' THEN CONCAT(LEFT(val, 1), '***@', SUBSTRING_INDEX(val, '@', -1))
WHEN 'name' THEN CONCAT(LEFT(val, 1), '***')
ELSE CONCAT(LEFT(val, 1), '***')
END
ELSE '***REDACTED***'
END;
Schritt 7: Erstellen der Richtlinien
Erstellen Sie drei Richtlinien, die alle von derselben Zuordnungstabelle gesteuert werden. Beide Spaltenmaskenrichtlinien verwenden dieselbe pii_mask Funktion. Das pii_type Argument teilt der Funktion mit, welcher Maskierungsstil angewendet werden soll, sodass Sie keine separate UDF pro Spaltentyp benötigen.
Das geregelte Tag priority wird verwendet, um MATCH COLUMNS mit der order_priority Spalte abzugleichen und ihren Wert als order_pri an die Maske UDF zu übergeben. So wird die bedingte Maskierung implementiert: Die Richtlinie übergibt den Prioritätswert der Zeile zur Abfragezeit an die UDF.
CREATE POLICY user_access_filter
ON SCHEMA abac_tutorial.mapping_demo
ROW FILTER abac_tutorial.mapping_demo.access_filter
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag('region') AS r, has_tag('department') AS d
USING COLUMNS (r, d);
CREATE POLICY pii_mask_name
ON SCHEMA abac_tutorial.mapping_demo
COLUMN MASK abac_tutorial.mapping_demo.pii_mask
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'name') AS m,
has_tag('priority') AS pri
ON COLUMN m
USING COLUMNS ('name', pri);
CREATE POLICY pii_mask_email
ON SCHEMA abac_tutorial.mapping_demo
COLUMN MASK abac_tutorial.mapping_demo.pii_mask
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'email') AS m,
has_tag('priority') AS pri
ON COLUMN m
USING COLUMNS ('email', pri);
Schritt 8: Überprüfen der Ergebnisse
Ihr Eintrag in der Zuordnungstabelle gibt Ihnen Zugriff auf us_east / engineering mit Freigabe masked. Führen Sie die folgende Abfrage aus, um sicherzustellen, dass nur die Reihenfolge Nr. 1 angezeigt wird, wobei PII teilweise maskiert ist.
SELECT * FROM abac_tutorial.mapping_demo.orders;
Bestellung Nr. 1 hat order_priority = 'standard', sodass Ihre masked Freigabe gilt.
Erwartetes Ergebnis für Ihren Benutzer:
| Bestellungs-ID | customer_name | Kunden-E-Mail | Vertriebsregion | Abteilung | Betrag | Bestelldatum | Bestellpriorität |
|---|---|---|---|---|---|---|---|
| 1 | A*** |
o***@acme.com |
us_east | Ingenieurwesen | 50.000 | 2025-01-15 | Standard |
Was andere Benutzer sehen:
| Benutzer | Sichtbare Bestellungen | Bestellpriorität | Verhalten von personenbezogenen Daten (PII) |
|---|---|---|---|
bob@example.com (full Freigabe) |
Nr. 4 (us_west, Umsatz) | Vertraulich |
***REDACTED*** — vertrauliche Außerkraftsetzungen full der Freigabe |
carol@example.com (none Freigabe) |
Nr. 5 (EU, Engineering) | Standard |
***REDACTED*** — none Freigabe bedeutet vollständige Redaction |
david@example.com (masked Freigabe) |
#7 (APAC, Marketing) | Vertraulich |
***REDACTED*** — vertrauliche Außerkraftsetzungen masked der Freigabe |
| (Katalogbesitzer) | Alle 10 | — | Alle unmaskiert (der Besitzer ist von Richtlinien ausgenommen) |
| (nicht aufgelisteter Benutzer) | Nichts | — | Zeilenfilter gibt keine Zeilen zurück. |
Beachten Sie, dass Bob die Freigabefull hat, aber immer noch ***REDACTED*** sieht, weil die Bestellung #4 confidential ist. Dies ist bedingte Maskierung: Der Prioritätswert der Zeile setzt die Benutzerfreigabe außer Kraft.
Schritt 9: Dynamisches Aktualisieren des Zugriffs
Der Hauptvorteil des Zuordnungstabellenansatzes besteht darin, dass Sie den Zugriff ändern können, indem Sie Zeilen in der Tabelle aktualisieren. Sie müssen keine Richtlinien, benutzerdefinierten Funktionen (UDFs) oder Gruppenmitgliedschaften aktualisieren.
Erneutes Zuweisen zu einer anderen Abteilung
Ändern Sie Ihre Abteilung von engineering zu sales. Order #2 (Beta Inc) ist ein confidential Verkaufsauftrag, sodass dessen PII trotz masked Freigabeeinstufung vollständig redigiert ist.
UPDATE abac_tutorial.mapping_demo.user_access
SET department = 'sales'
WHERE user_email = current_user();
Führen Sie die folgende Abfrage aus, um dies zu überprüfen. Sie sollten die Bestellung Nr. 2 mit ***REDACTED*** personenbezogenen Informationen sehen.
SELECT * FROM abac_tutorial.mapping_demo.orders;
Änderung rückgängig machen:
UPDATE abac_tutorial.mapping_demo.user_access
SET department = 'engineering'
WHERE user_email = current_user();
Upgrade von PII-Freigaben
Ändern Sie Ihre Freigabe von masked zu full. Für Zeilen mit Standardpriorität werden nun die tatsächlichen PII-Werte angezeigt.
UPDATE abac_tutorial.mapping_demo.user_access
SET pii_access = 'full'
WHERE user_email = current_user();
Führen Sie die folgende Abfrage aus, um dies zu überprüfen. Bestellung Nr. 1 hat standard Priorität, daher sollten Sie mit full Freigabe Acme Corp und orders@acme.com sehen können.
SELECT * FROM abac_tutorial.mapping_demo.orders;
Änderung rückgängig machen:
UPDATE abac_tutorial.mapping_demo.user_access
SET pii_access = 'masked'
WHERE user_email = current_user();
Gewähren des Zugriffs auf eine zusätzliche Region
Fügen Sie eine zweite Zeile ein, um Den Zugriff auf EU-Engineering zu gewähren. Es sind keine neuen Gruppen oder Richtlinien erforderlich.
INSERT INTO abac_tutorial.mapping_demo.user_access
VALUES (current_user(), 'eu', 'engineering', 'masked', '2099-12-31');
Führen Sie die folgende Abfrage aus, um dies zu überprüfen. Sie sollten jetzt sowohl die Bestellung Nr. 1 (us_east, Engineering) als auch die Bestellung #5 (eu, Engineering) sehen, wobei PII teilweise maskiert ist.
SELECT * FROM abac_tutorial.mapping_demo.orders;
Entfernen Sie den zusätzlichen Zugriff:
DELETE FROM abac_tutorial.mapping_demo.user_access
WHERE user_email = current_user() AND region = 'eu';
Zugriff beenden
Legen Sie Ihren Zugriffseintrag auf ein vergangenes Datum fest. Die Zeilenfilter-UDF überprüft expires_on >= current_date(), sodass abgelaufene Einträge automatisch ignoriert werden und der Zugriff automatisch widerrufen wird. Dies ist nützlich für Auftragnehmer, Datenfreigabevereinbarungen mit fester Dauer oder zeitlich begrenzte Projekte.
UPDATE abac_tutorial.mapping_demo.user_access
SET expires_on = current_date() - INTERVAL 1 DAY
WHERE user_email = current_user();
Führen Sie die folgende Abfrage aus, um sicherzustellen, dass keine Zeilen angezeigt werden.
SELECT * FROM abac_tutorial.mapping_demo.orders;
Wiederherstellen des Zugriffs mit einem zukünftigen Ablaufdatum:
UPDATE abac_tutorial.mapping_demo.user_access
SET expires_on = '2099-12-31'
WHERE user_email = current_user();
Führen Sie die folgende Abfrage aus, um zu überprüfen, ob der Zugriff wiederhergestellt wird.
SELECT * FROM abac_tutorial.mapping_demo.orders;
Zusammenfassung
In diesem Lernprogramm wurden drei Muster veranschaulicht:
- Zuordnungstabellenmuster: Eine einzelne Nachschlagetabelle steuert sowohl die Zeilenfilterung als auch die Spaltenmaskierung. Zugriffsänderungen werden vorgenommen, indem Zeilen aktualisiert werden, ohne dass Richtlinien- oder Gruppenänderungen erforderlich sind.
-
Bedingte Maskierung: Die UDF-Maske überprüft die
order_prioritySpalte in jeder Zeile, um zu entscheiden, wie PII maskiert werden soll. Vertrauliche Zeilen werden unabhängig von der Freigabestufe des Benutzers immer vollständig redigiert, implementiert durch Kennzeichnenorder_priorityund an die UDF übergeben viaMATCH COLUMNS. -
Ablauf des Zugriffs: Die Zuordnungstabelle enthält ein
expires_onDatum. Der Zeilenfilter-UDF überprüft dieses Datum aufcurrent_date(), sodass abgelaufene Zugriffe still ignoriert und automatisch widerrufen werden, ohne dass manuelle Eingriffe erforderlich sind.
Aufräumen
Führen Sie das folgende aus, um alle in diesem Tutorial erstellten Objekte zu entfernen.
DROP POLICY user_access_filter ON SCHEMA abac_tutorial.mapping_demo;
DROP POLICY pii_mask_name ON SCHEMA abac_tutorial.mapping_demo;
DROP POLICY pii_mask_email ON SCHEMA abac_tutorial.mapping_demo;
DROP FUNCTION IF EXISTS abac_tutorial.mapping_demo.access_filter;
DROP FUNCTION IF EXISTS abac_tutorial.mapping_demo.pii_mask;
DROP TABLE IF EXISTS abac_tutorial.mapping_demo.orders;
DROP TABLE IF EXISTS abac_tutorial.mapping_demo.user_access;
DROP SCHEMA IF EXISTS abac_tutorial.mapping_demo CASCADE;
Verwenden Sie die Benutzeroberfläche des Katalog-Explorers, um die verwalteten Tags region, department, pii und priority zu entfernen.