Udostępnij za pośrednictwem


Tworzenie widoku dynamicznego

W katalogu Unity można użyć widoków dynamicznych, aby skonfigurować precyzyjną kontrolę dostępu, w tym:

  • Zabezpieczenia na poziomie kolumn lub wierszy.
  • Maskowanie danych.

Katalog Unity wprowadza następujące funkcje, które pozwalają dynamicznie ograniczać użytkownikom dostęp do wiersza, kolumny lub rekordu w widoku:

  • current_user(): zwraca adres e-mail bieżącego użytkownika.
  • is_account_group_member(): zwraca TRUE wartość, jeśli bieżący użytkownik jest członkiem określonej grupy na poziomie konta. Zalecane do użycia w dynamicznych widokach związanych z danymi Katalogu Unity.
  • is_member(): zwraca TRUE 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 w kontekście danych Unity Catalog, ponieważ nie oceniają 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ą tworzenie widoków dynamicznych w katalogu Unity.

Zanim rozpoczniesz

Aby utworzyć lub odczytać widoki dynamiczne, wymagania są takie same jak dla 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 dla bezserwerowychobliczeniowych, 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 grupy auditors mogą uzyskiwać dostęp do adresów e-mail z tabeli sales_raw. Podczas analizy zapytań platforma Apache Spark zastępuje instrukcję CASE ciągiem literału REDACTED 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 Unity Catalog używają języka Spark SQL, można zaimplementować zaawansowane maskowanie danych, stosując bardziej złożone wyrażenia SQL i wyrażenia regularne. 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