Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym samouczku pokazano, jak skonfigurować w katalogu Unity Catalog zasady ABAC dotyczące filtru wierszy i maski kolumn przy użyciu języka SQL. Aby zapoznać się z wersją opartą na interfejsie użytkownika eksploratora wykazu, zobacz Samouczek: konfigurowanie usługi ABAC.
W tym przykładzie zespół analiz nie może uzyskać dostępu do danych klientów z UE, a numery ubezpieczenia społecznego (SSN) są zawsze maskowane. Klienci, którzy wyrazili zgodę na udostępnianie danych, mają wyświetloną pełną wiadomość e-mail. Inni widzą tylko maskowaną wersję.
Ten samouczek obejmuje następujące kroki:
- Twórz tagi regulowane
- Utwórz katalog Unity Catalog, schemat i tabelę.
- Nakładanie tagów na kolumny podlegające reglamentacji
- Utwórz funkcję użytkownika do wykrywania adresów UE
- Utwórz zasady filtrowania wierszy
- Przetestuj filtr wierszy
- Stwórz FZPU do maskowania numerów ubezpieczenia społecznego.
- Tworzenie zasad maski kolumn
- Testowanie maski kolumn
Po wykonaniu tych kroków możesz opcjonalnie rozszerzyć samouczek przy użyciu warunkowego maskowania wiadomości e-mail (kroki 10–12).
Wymagania wstępne
- Środowisko Databricks Runtime w wersji 16.4 lub nowszej, lub obliczeń bezserwerowych.
- Uprawnienia administratora konta lub administratora obszaru roboczego (aby utworzyć tagi zarządzane).
-
MANAGEuprawnienia do katalogu docelowego lub schematu. -
EXECUTEw UDF.
Środowisko obliczeniowe ze starszymi środowiskami uruchomieniowymi nie może uzyskać dostępu do tabel zabezpieczonych przez usługę ABAC.
Krok 1: Tworzenie tagów zarządzanych
Tagi zarządzane to pary klucz-wartość zdefiniowane na poziomie konta. Zasady ABAC używają tych elementów do odnajdywania, które kolumny należy filtrować lub maskować. W tym samouczku utworzysz dwa zarządzane tagi:
- Tag z trzema
piidozwolonymi wartościami:ssn,addressiemail - Tag tylko jako klucz (bez dozwolonych wartości) do identyfikacji kolumn zgody
Aby utworzyć zarządzany tag, musisz mieć uprawnienia do tworzenia zarządzanych tagów na poziomie konta. Administratorzy kont i obszarów roboczych domyślnie mają uprawnienia CREATE.
- W obszarze roboczym Azure Databricks kliknij pozycję
Catalog.
- Kliknij
Przycisk Zarządzaj .
- W menu rozwijanym kliknij pozycję Zarządzane tagi.
- Kliknij pozycję Utwórz tag zarządzany.
- Dla klucza tagu wprowadź
pii. - Wprowadź opis tagu zarządzanego.
- W przypadku dozwolonych wartości wprowadź:
ssn,addressiemail. Do tego klucza tagu można przypisać tylko te wartości. - Kliknij Utwórz.
- Powtórz kroki 4–8, aby utworzyć drugi tag zarządzany za pomocą klucza
consent. Pozostaw dozwolone wartości puste (tylko tag z kluczem).
Ostrzeżenie
Dane tagów są przechowywane jako zwykły tekst i mogą być replikowane globalnie. Nie używaj nazw tagów, wartości ani deskryptorów, które mogą naruszyć bezpieczeństwo zasobów. Na przykład nie należy używać nazw tagów, wartości ani deskryptorów zawierających informacje osobiste lub poufne.
Krok 2: Utwórz tabelę klientów
Utwórz wykaz, schemat i tabelę z profilami klientów. Kolumna has_consent jest później używana do warunkowego maskowania wiadomości e-mail. Klienci, którzy wyrazili zgodę (TRUE), mają wyświetloną pełną wiadomość e-mail.
Uruchom następujące polecenia w notesie dołączonym do obliczeń w środowisku Databricks Runtime 16.4 lub nowszym:
-- 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);
Krok 3. Dodawanie zarządzanych tagów do kolumn
Taguj kolumny ssn_number, home_address i email za pomocą tagu pii zarządzanego. Zasady ABAC dopasowują kolumny na podstawie tagu, a nie nazwy.
Kolumna has_consent jest oznaczona tagiem zarządzanym consent . Jest to wymagane do realizacji zasad maskowania świadomych zgody w kroku 11, które przekazują has_consent do funkcji zdefiniowanej przez użytkownika za pośrednictwem USING COLUMNS.
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' = '');
Krok 4: Tworzenie funkcji UDF do wykrywania adresów UE
Funkcja zdefiniowana przez użytkownika otrzymuje wartość każdej otagowanej pii = address kolumny i zwraca następujące elementy:
-
FALSEjeśli adres zawieraEU,E.U.lubEurope— wiersz jest ukryty. -
TRUEw przeciwnym razie — wiersz zostanie wyświetlony.
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
);
Uwaga / Notatka
Jest to uproszczona kontrola w celach demonstracyjnych. W środowisku produkcyjnym użyj bardziej niezawodnej metody, takiej jak kolumna kodu kraju lub tabela odnośników, aby określić region.
Krok 5. Tworzenie zasad filtru wierszy
Aby utworzyć zasady, musisz mieć MANAGE obiekt lub własność obiektu. Aby dodać UDF do polityki, musisz mieć EXECUTE na UDF.
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);
Zasady można również tworzyć za pomocą interfejsu użytkownika Eksploratora wykazu. Aby uzyskać szczegółowe informacje, zobacz Tworzenie filtrów wierszy i zasad maski kolumn i zarządzanie nimi .
Krok 6. Testowanie filtru wierszy
Uruchom następujące zapytanie, aby sprawdzić, czy zasady filtrowania wierszy działają.
SELECT * FROM abac_tutorial.customers.profiles;
Zwracane są tylko 10 wierszy niebędących rezydentami UE. Pięciu klientów UE (Liam, Sophie, Hans, Elena i Johan) jest ukrytych.
Krok 7: Utwórz funkcję zdefiniowaną przez użytkownika w celu maskowania numerów SSN
Ta funkcja UDF zwraca w pełni zredagowany symbol zastępczy dla dowolnej przekazanej do niej wartości SSN.
CREATE OR REPLACE FUNCTION redact_ssn(ssn STRING)
RETURNS STRING
RETURN '***-**-****';
Krok 8. Tworzenie zasad maski kolumn
Utwórz politykę dotyczącą wszystkich kolumn oznaczonych tagami pii = ssn i stosując funkcję redact_ssn do każdej z nich.
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;
Krok 9. Testowanie maski kolumn
Uruchom następujące zapytanie, aby sprawdzić, czy filtr wierszy i maska kolumn są aktywne.
SELECT * FROM abac_tutorial.customers.profiles;
Numery SSN teraz wracają jako ***-**-****. Zwracani są tylko mieszkańcy spoza UE, ponieważ filtr wykazu jest również aktywny.
Rozszerzanie: warunkowe maskowanie wiadomości e-mail
Poniższe kroki rozszerzają proces maskowania wiadomości e-mail uwzględniającym zgodę. Klienci, którzy wyrazili zgodę (has_consent = TRUE) mają wyświetloną pełną wiadomość e-mail. Inni widzą tylko pierwszy znak i domenę.
Krok 10: Tworzenie funkcji UDF (zdefiniowanej przez użytkownika) do maskowania wiadomości e-mail uwzględniającą zgodę
Ta funkcja zdefiniowana przez użytkownika (UDF) przyjmuje dwa argumenty.
-
email: rzeczywista wartość wiadomości e-mail z dopasowanej kolumny -
consent: wartośćhas_consentkolumny w tym samym wierszu
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;
Krok 11. Tworzenie warunkowych zasad maskowania wiadomości e-mail
Ta polityka dotyczy kolumn oznaczonych tagami pii = email i przekazuje kolumnę has_consent do funkcji zdefiniowanej przez użytkownika.
Uwaga / Notatka
Kolumna has_consent została oznaczona tagiem zarządzanym consent w kroku 3. Jest to wymagane, ponieważ USING COLUMNS może odwoływać się tylko do kolumn, które są zgodne za pośrednictwem elementu MATCH COLUMNS. Mimo że has_consent nie jest maskowany, należy go oznaczyć, aby polityka mogła przekazać jego wartość do funkcji zdefiniowanej przez użytkownika.
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);
Krok 12. Testowanie warunkowego maskowania poczty e-mail
Uruchom następujące zapytanie, aby sprawdzić, czy wszystkie trzy zasady współpracują ze sobą.
SELECT * FROM abac_tutorial.customers.profiles;
Klienci z has_consent = TRUE mają pełny adres e-mail wyświetlony. Klienci, którzy has_consent = FALSE widzą maskowaną wersję. Numery SSN pozostają w pełni zamaskowane, a zwracani są tylko klienci spoza UE.
| imię | ma_zgodę | ssn_number | |
|---|---|---|---|
| John | TRUE | john.doe@example.com | ***-**-**** |
| Jane | FALSE | j***@example.com | ***-**-**** |
| Alicja | TRUE | alice.j@example.com | ***-**-**** |
| Robert | FALSE | b***@example.com | ***-**-**** |
| Charlie | TRUE | charlie.d@example.com | ***-**-**** |
| Emily | FALSE | e***@example.com | ***-**-**** |
| Frank | TRUE | frank.m@example.com | ***-**-**** |
| Wdzięk | TRUE | grace.w@example.com | ***-**-**** |
| Hank | FALSE | h***@example.com | ***-**-**** |
| Bluszcz | TRUE | ivy.taylor@example.com | ***-**-**** |
Podsumowanie
W tym samouczku przedstawiono trzy wzorce ABAC:
- Filtrowanie wierszy: ukrywa wiersze na podstawie wartości kolumn dopasowanych przez tagi zarządzane
- Maskowanie kolumn: maskowanie kolumn pasujących do tagów podlegających
-
Maskowanie warunkowe: maskowanie kolumny na podstawie wartości innej kolumny w tym samym wierszu poprzez oznaczanie kolumny kontekstu i przekazywanie jej do funkcji zdefiniowanej przez użytkownika, używając
USING COLUMNS
Czyszczenie
Aby usunąć wszystkie obiekty utworzone w tym samouczku, uruchom następujące polecenie. Jeśli pominięto kroki warunkowego maskowania wiadomości e-mail, instrukcje DROP POLICY mask_email_by_consent_policy i DROP FUNCTION mask_email_by_consent kończą się niepowodzeniem, co jest oczekiwane.
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;
Aby usunąć tagi pii i consent zarządzane, użyj interfejsu użytkownika Eksploratora Katalogu.