Tworzenie widoku dynamicznego
W wykazie aparatu Unity można użyć widoków dynamicznych do skonfigurowania szczegółowej kontroli dostępu, w tym:
- Zabezpieczenia na poziomie kolumn lub wierszy.
- Maskowanie danych.
Wykaz aparatu Unity wprowadza następujące funkcje, które umożliwiają dynamiczne ograniczanie dostępu użytkowników do wiersza, kolumny lub rekordu w widoku:
current_user()
: zwraca adres e-mail bieżącego użytkownika.is_account_group_member()
: zwracaTRUE
wartość, jeśli bieżący użytkownik jest członkiem określonej grupy na poziomie konta. Zalecane do użycia w widokach dynamicznych względem danych wykazu aparatu Unity.is_member()
: zwracaTRUE
wartość, jeśli bieżący użytkownik jest członkiem określonej grupy na poziomie obszaru roboczego. Ta funkcja jest udostępniana pod kątem zgodności z istniejącym magazynem metadanych Hive. Unikaj używania ich z widokami względem danych wykazu aparatu Unity, ponieważ nie ocenia członkostwa w grupach na poziomie konta.
Usługa Azure Databricks zaleca, aby użytkownicy nie udzielali użytkownikom możliwości odczytywania tabel i widoków, do których odwołuje się widok.
Poniższe przykłady ilustrują sposób tworzenia widoków dynamicznych w wykazie aparatu Unity.
Zanim rozpoczniesz
Aby tworzyć lub odczytywać widoki dynamiczne, wymagania są takie same jak w przypadku widoków standardowych, z wyjątkiem wymagań obliczeniowych. Należy użyć jednego z następujących zasobów obliczeniowych:
Usługa SQL Warehouse.
Środowisko obliczeniowe z trybem dostępu współdzielonego.
Środowisko obliczeniowe z trybem dostępu pojedynczego użytkownika w środowisku Databricks Runtime 15.4 LTS lub nowszym.
Nie można odczytać widoków dynamicznych przy użyciu obliczeń pojedynczego użytkownika w środowisku Databricks Runtime 15.3 lub nowszym.
Aby skorzystać z filtrowania danych dostępnego w środowisku Databricks Runtime 15.4 LTS lub nowszym, należy również sprawdzić, czy obszar roboczy jest włączony na potrzeby przetwarzania bezserwerowego, ponieważ funkcja filtrowania danych, która obsługuje widoki dynamiczne, działa na bezserwerowych obliczeniach. W związku z tym mogą być naliczane opłaty za zasoby obliczeniowe bezserwerowe w przypadku korzystania z obliczeń pojedynczego użytkownika do odczytywania widoków dynamicznych. Zobacz Szczegółowa kontrola dostępu w obliczeniach pojedynczego użytkownika.
Uprawnienia na poziomie kolumny
W widoku dynamicznym można ograniczyć kolumny, do których może uzyskać dostęp określony użytkownik lub grupa. W poniższym przykładzie tylko członkowie auditors
grupy mogą uzyskiwać dostęp do adresów e-mail z sales_raw
tabeli. Podczas analizy zapytań platforma Apache Spark zastępuje instrukcję CASE
ciągiem REDACTED
literału lub rzeczywistą zawartością kolumny adresu e-mail. Inne kolumny są zwracane normalnie. Ta strategia nie ma negatywnego wpływu na wydajność zapytań.
-- 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
Uprawnienia na poziomie wiersza
W widoku dynamicznym można określić uprawnienia na poziomie wiersza lub pola. W poniższym przykładzie tylko członkowie managers
grupy mogą wyświetlać kwoty transakcji, gdy przekraczają 1000 000 USD. Pasujące wyniki są filtrowane dla innych użytkowników.
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;
Maskowanie danych
Ponieważ widoki w wykazie aparatu Unity używają języka Spark SQL, można zaimplementować zaawansowane maskowanie danych przy użyciu bardziej złożonych wyrażeń SQL i wyrażeń regularnych. W poniższym przykładzie wszyscy użytkownicy mogą analizować domeny poczty e-mail, ale tylko członkowie auditors
grupy mogą wyświetlać cały adres e-mail użytkownika.
-- 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