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 erfahren Sie, wie Sie ABAC-Richtlinien für Zeilenfilter und Spaltenmasken im Unity-Katalog mit SQL konfigurieren. Informationen zur UI-basierten Version des Katalog-Explorers finden Sie im Lernprogramm: Konfigurieren von ABAC.
In diesem Beispiel kann ein Analyseteam nicht auf EU-Kundendatensätze zugreifen, und SSNs sind immer maskiert. Kunden, die der Datenfreigabe zugestimmt haben, werden ihre vollständige E-Mail angezeigt. Andere sehen nur eine maskierte Version.
Dieses Lernprogramm enthält die folgenden Schritte:
- Erstellen von geregelten Tags
- Erstellen eines Unity-Katalogkatalogs, eines Schemas und einer Tabelle
- Anwenden geregelter Tags auf Spalten
- Erstellen einer UDF zum Erkennen von EU-Adressen
- Erstellen einer Zeilenfilterrichtlinie
- Testen des Zeilenfilters
- Erstellen einer UDF zum Maskieren von SSNs
- Erstellen einer Spaltenmaskenrichtlinie
- Testen der Spaltenmaske
Nach Abschluss dieser Schritte können Sie das Lernprogramm optional mit bedingter E-Mail-Maskierung erweitern (Schritte 10–12).
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.
Die Berechnung älterer Runtimes kann nicht auf tabellen zugreifen, die durch ABAC gesichert sind.
Schritt 1: Erstellen von gesteuerten Tags
Gesteuerte Tags sind Schlüssel-Wert-Paare, die auf Kontoebene definiert sind. ABAC-Richtlinien verwenden sie, um zu ermitteln, welche Spalten gefiltert oder maskiert werden sollen. In diesem Tutorial erstellen Sie zwei verwaltete Tags:
- Ein
piiTag mit drei zulässigen Werten:ssn,address, undemail - Ein schlüsselgeschütztes
consentTag (keine zulässigen Werte), um Zustimmungsspalten zu identifizieren
Um ein geregeltes Tag zu erstellen, müssen Sie über die CREATE-Berechtigung für das geregelte Tag auf der Kontoebene verfügen. Konto- und Arbeitsbereichsadministratoren verfügen standardmäßig über CREATE.
- Klicken Sie im Azure Databricks-Arbeitsbereich auf das
Katalog.
- Klicken Sie auf das
Steuern-Schaltfläche.
- Klicken Sie im Dropdownmenü auf "Governed Tags".
- Klicken Sie auf " Gesteuertes Tag erstellen".
- Geben Sie
piifür den Tagschlüssel ein. - Geben Sie eine Beschreibung für das geregelte Tag ein.
- Geben Sie für zulässige Werte Folgendes ein:
ssn,address, undemail. Nur diese Werte können diesem Tagschlüssel zugewiesen werden. - Klicken Sie auf Erstellen.
- Wiederholen Sie die Schritte 4 bis 8, um ein zweites geregeltes Tag mit dem Schlüssel
consentzu erstellen. Lassen Sie die zulässigen Werte leer (nur Schlüssel-only-Tag).
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 der Kundentabelle
Erstellen Sie einen Katalog, ein Schema und eine Tabelle mit Kundenprofilen. Die has_consent Spalte wird später für die bedingte E-Mail-Maskierung verwendet. Kunden, die ihre Zustimmung erteilt haben (TRUE) haben ihre vollständige E-Mail angezeigt.
Führen Sie die folgenden Befehle in einem mit dem Compute verbundenen Notizbuch unter Databricks Runtime 16.4 oder höher aus.
-- Create catalog (if not already exists)
CREATE CATALOG IF NOT EXISTS abac_tutorial;
USE CATALOG abac_tutorial;
-- Create schema
CREATE SCHEMA IF NOT EXISTS customers;
USE SCHEMA customers;
CREATE OR REPLACE TABLE profiles (
first_name STRING,
last_name STRING,
email STRING,
phone_number STRING,
home_address STRING,
ssn_number STRING,
has_consent BOOLEAN
);
INSERT INTO profiles (first_name, last_name, email, phone_number, home_address, ssn_number, has_consent)
VALUES
('John', 'Doe', 'john.doe@example.com', '123-456-7890', '123 Main St, NY', '123-45-6789', TRUE),
('Jane', 'Smith', 'jane.smith@example.com', '234-567-8901', '456 Oak St, CA', '234-56-7890', FALSE),
('Alice', 'Johnson', 'alice.j@example.com', '345-678-9012', '789 Pine St, TX', '345-67-8901', TRUE),
('Bob', 'Brown', 'bob.brown@example.com', '456-789-0123', '321 Maple St, FL', '456-78-9012', FALSE),
('Charlie', 'Davis', 'charlie.d@example.com', '567-890-1234', '654 Cedar St, IL', '567-89-0123', TRUE),
('Emily', 'White', 'emily.w@example.com', '678-901-2345', '987 Birch St, WA', '678-90-1234', FALSE),
('Frank', 'Miller', 'frank.m@example.com', '789-012-3456', '741 Spruce St, WA', '789-01-2345', TRUE),
('Grace', 'Wilson', 'grace.w@example.com', '890-123-4567', '852 Elm St, NV', '890-12-3456', TRUE),
('Hank', 'Moore', 'hank.moore@example.com', '901-234-5678', '963 Walnut St, CO', '901-23-4567', FALSE),
('Ivy', 'Taylor', 'ivy.taylor@example.com', '012-345-6789', '159 Aspen St, AZ', '012-34-5678', TRUE),
('Liam', 'Connor', 'liam.c@example.com', '111-222-3333', '12 Abbey Street, Dublin, Ireland EU', '111-22-3333', TRUE),
('Sophie', 'Dubois', 'sophie.d@example.com', '222-333-4444', '45 Rue de Rivoli, Paris, France Europe', '222-33-4444', FALSE),
('Hans', 'Müller', 'hans.m@example.com', '333-444-5555', '78 Berliner Str., Berlin, Germany E.U.', '333-44-5555', TRUE),
('Elena', 'Rossi', 'elena.r@example.com', '444-555-6666', '23 Via Roma, Milan, Italy Europe', '444-55-6666', FALSE),
('Johan', 'Andersson', 'johan.a@example.com', '555-666-7777', '56 Drottninggatan, Stockholm, Sweden EU', '555-66-7777', TRUE);
Schritt 3: Hinzufügen geregelter Tags zu Spalten
Markieren Sie die ssn_number, home_addressund email Spalten mit dem pii gesteuerten Tag. ABAC-Richtlinien ordnen Spalten anhand von Tags und nicht nach Namen zu.
Die has_consent Spalte wird mit dem consent governed-Tag markiert. Dies ist für die datenschutzbewusste Maskierungsrichtlinie in Schritt 11 erforderlich, wobei has_consent über USING COLUMNS an die UDF übergeben wird.
ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN ssn_number
SET TAGS ('pii' = 'ssn');
ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN home_address
SET TAGS ('pii' = 'address');
ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN email
SET TAGS ('pii' = 'email');
ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN has_consent
SET TAGS ('consent' = '');
Schritt 4: Erstellen einer UDF zum Erkennen von EU-Adressen
Der Wert jeder markierten pii = address Spalte wird in diese UDF übergeben und gibt Folgendes zurück:
-
FALSEwenn die AdresseEU,E.U.oderEuropeenthält, wird die Zeile ausgeblendet. -
TRUEandernfalls wird die Zeile angezeigt.
CREATE OR REPLACE FUNCTION is_not_eu_address(address STRING)
RETURNS BOOLEAN
RETURN (
SELECT CASE
WHEN LOWER(address) LIKE '%eu%'
OR LOWER(address) LIKE '%e.u.%'
OR LOWER(address) LIKE '%europe%'
THEN FALSE
ELSE TRUE
END
);
Note
Dies ist eine vereinfachte Überprüfung für Demonstrationszwecke. Verwenden Sie in der Produktion eine robustere Methode, z. B. eine Ländercodespalte oder eine Nachschlagetabelle, um die Region zu bestimmen.
Schritt 5: Erstellen einer Zeilenfilterrichtlinie
Zum Erstellen einer Richtlinie müssen Sie über das Objekt oder den Besitz des Objekts verfügen MANAGE . Um einer Richtlinie eine UDF hinzuzufügen, müssen Sie EXECUTE auf der UDF besitzen.
CREATE POLICY hide_eu_customers
ON SCHEMA abac_tutorial.customers
ROW FILTER is_not_eu_address
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'address') AS addr_col
USING COLUMNS (addr_col);
Sie können Richtlinien auch über die Katalog-Explorer-Benutzeroberfläche erstellen. Ausführliche Informationen finden Sie unter Erstellen und Verwalten von Zeilenfilter- und Spaltenformatrichtlinien .
Schritt 6: Testen des Zeilenfilters
Führen Sie die folgende Abfrage aus, um zu überprüfen, ob die Zeilenfilterrichtlinie funktioniert.
SELECT * FROM abac_tutorial.customers.profiles;
Nur die 10 Zeilen mit Nicht EU-Ansässigen werden zurückgegeben. Die fünf EU-Kunden (Liam, Sophie, Hans, Elena und Johan) sind verborgen.
Schritt 7: Erstellen einer UDF zum Maskieren von SSNs
Diese UDF gibt einen vollständig redigierten Platzhalter für jeden SSN-Wert zurück, der an ihn übergeben wird.
CREATE OR REPLACE FUNCTION redact_ssn(ssn STRING)
RETURNS STRING
RETURN '***-**-****';
Schritt 8: Erstellen einer Spaltenmaskierungsrichtlinie
Erstellen Sie eine Richtlinie, die auf alle Spalten ausgerichtet ist, die markiert sind pii = ssn , und wendet die redact_ssn Funktion auf die einzelnen Spalten an.
CREATE POLICY redact_ssn_policy
ON SCHEMA abac_tutorial.customers
COLUMN MASK redact_ssn
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'ssn') AS ssn_col
ON COLUMN ssn_col;
Schritt 9: Testen der Spaltenmaske
Führen Sie die folgende Abfrage aus, um sicherzustellen, dass sowohl der Zeilenfilter als auch die Spaltenmaske aktiv sind.
SELECT * FROM abac_tutorial.customers.profiles;
SSNs werden jetzt als ***-**-****zurückgegeben. Nur Nicht-EU-Einwohner werden zurückgegeben, da der Zeilenfilter ebenfalls aktiv ist.
Erweitern: Bedingte E-Mail-Maskierung
Mit den folgenden Schritten wird das Tutorial um die zustimmungs-bewusste E-Mail-Maskierung erweitert. Kunden, die sich angemeldet haben (has_consent = TRUE) haben ihre vollständige E-Mail angezeigt, andere sehen nur das erste Zeichen und die erste Domäne.
Schritt 10: Erstellen einer zustimmungsfähigen E-Mail-Maskierung für UDF
Diese UDF akzeptiert zwei Argumente:
-
email: der tatsächliche E-Mail-Wert aus der übereinstimmenen Spalte -
consent: der Wert derhas_consentSpalte in derselben Zeile
CREATE OR REPLACE FUNCTION mask_email_by_consent(email STRING, consent BOOLEAN)
RETURNS STRING
RETURN CASE
WHEN consent = TRUE THEN email
ELSE CONCAT(LEFT(email, 1), '***@', SUBSTRING_INDEX(email, '@', -1))
END;
Schritt 11: Erstellen der Richtlinie für die bedingte E-Mail-Maskierung
Diese Richtlinie zielt auf die Spalten pii = email ab und übergibt die Spalte has_consent an die UDF.
Note
Die has_consent Spalte wurde mit dem consent verwalteten Tag in Schritt 3 markiert. Dies ist erforderlich, da USING COLUMNS nur Spalten referenziert werden können, die über MATCH COLUMNS. Auch wenn has_consent nicht maskiert wird, muss es markiert werden, damit die Richtlinie seinen Wert an die UDF übergeben kann.
CREATE POLICY mask_email_by_consent_policy
ON SCHEMA abac_tutorial.customers
COLUMN MASK mask_email_by_consent
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'email') AS email_col,
has_tag('consent') AS consent_col
ON COLUMN email_col
USING COLUMNS (consent_col);
Schritt 12: Testen der bedingten E-Mail-Maskierung
Führen Sie die folgende Abfrage aus, um zu überprüfen, ob alle drei Richtlinien zusammenarbeiten.
SELECT * FROM abac_tutorial.customers.profiles;
Kunden mit has_consent = TRUE wird ihre vollständige E-Mail angezeigt. Kunden mit has_consent = FALSE sehen eine maskierte Version. SSNs bleiben vollständig maskiert, und nur Nicht-EU-Kunden werden zurückgegeben.
| Vorname | hat_zustimmung | Sozialversicherungsnummer | |
|---|---|---|---|
| John | WAHR | john.doe@example.com | ***-**-**** |
| Jane | FALSCH | j***@example.com | ***-**-**** |
| Alina | WAHR | alice.j@example.com | ***-**-**** |
| Bob | FALSCH | b***@example.com | ***-**-**** |
| Charlie | WAHR | charlie.d@example.com | ***-**-**** |
| Emily | FALSCH | e***@example.com | ***-**-**** |
| Frank | WAHR | frank.m@example.com | ***-**-**** |
| Grace | WAHR | grace.w@example.com | ***-**-**** |
| Hank | FALSCH | h***@example.com | ***-**-**** |
| Ivy | WAHR | ivy.taylor@example.com | ***-**-**** |
Zusammenfassung
In diesem Lernprogramm wurden drei ABAC-Muster veranschaulicht:
- Zeilenfilterung: Ausblenden von Zeilen auf der Grundlage von Spaltenwerten, die mit den gesteuerten Tags übereinstimmen
- Spaltenmaskierung: Maskieren von Spalten, die mit geregelten Tags übereinstimmen
-
Bedingte Maskierung: Maskieren Sie eine Spalte basierend auf dem Wert einer anderen Spalte in derselben Zeile, indem Sie die Kontextspalte markieren und sie an die UDF übergeben.
USING COLUMNS
Aufräumen
Führen Sie das folgende aus, um alle in diesem Tutorial erstellten Objekte zu entfernen. Wenn Sie die Schritte zur bedingten E-Mail-Maskierung übersprungen haben, schlagen die DROP POLICY mask_email_by_consent_policy Anweisungen DROP FUNCTION mask_email_by_consent fehl, was zu erwarten ist.
DROP POLICY hide_eu_customers ON SCHEMA abac_tutorial.customers;
DROP POLICY redact_ssn_policy ON SCHEMA abac_tutorial.customers;
DROP POLICY mask_email_by_consent_policy ON SCHEMA abac_tutorial.customers;
DROP FUNCTION IF EXISTS abac_tutorial.customers.is_not_eu_address;
DROP FUNCTION IF EXISTS abac_tutorial.customers.redact_ssn;
DROP FUNCTION IF EXISTS abac_tutorial.customers.mask_email_by_consent;
DROP TABLE IF EXISTS abac_tutorial.customers.profiles;
DROP SCHEMA IF EXISTS abac_tutorial.customers CASCADE;
Verwenden Sie die Benutzeroberfläche des Katalog-Explorers, um die durch pii und consent gesteuerten Tags zu entfernen.