Sdílet prostřednictvím


Vytvoření dynamického zobrazení

V katalogu Unity můžete pomocí dynamických zobrazení nakonfigurovat jemně odstupňované řízení přístupu, včetně:

  • Zabezpečení na úrovni sloupců nebo řádků
  • Maskování dat

Poznámka:

Podrobné řízení přístupu pomocí dynamických zobrazení není k dispozici v clusterech s režimem přístupu jednoho uživatele.

Katalog Unity zavádí následující funkce, které umožňují dynamicky omezit, kteří uživatelé mají přístup k řádku, sloupci nebo záznamu v zobrazení:

  • current_user(): Vrátí e-mailovou adresu aktuálního uživatele.
  • is_account_group_member(): Vrátí TRUE , pokud je aktuální uživatel členem konkrétní skupiny na úrovni účtu. Doporučeno pro použití v dynamických zobrazeních s daty katalogu Unity.
  • is_member(): Vrátí TRUE , pokud je aktuální uživatel členem konkrétní skupiny na úrovni pracovního prostoru. Tato funkce je k dispozici z důvodu kompatibility se stávajícím metastorem Hive. Nepoužívejte ho se zobrazeními pro data katalogu Unity, protože nevyhodnocuje členství ve skupinách na úrovni účtu.

Azure Databricks doporučuje uživatelům neudělovat možnost číst tabulky a zobrazení odkazovaná v zobrazení.

Následující příklady ukazují, jak vytvořit dynamická zobrazení v katalogu Unity.

Oprávnění na úrovni sloupce

Pomocí dynamického zobrazení můžete omezit sloupce, ke kterým má konkrétní uživatel nebo skupina přístup. V následujícím příkladu mají k e-mailovým adresům z sales_raw tabulky přístup jenom členové auditors skupiny. Během analýzy dotazů Apache Spark nahradí CASE příkaz buď literálovým řetězcem REDACTED , nebo skutečným obsahem sloupce e-mailové adresy. Ostatní sloupce se vrátí jako normální. Tato strategie nemá žádný negativní dopad na výkon dotazů.

-- 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

Oprávnění na úrovni řádků

Pomocí dynamického zobrazení můžete zadat oprávnění na úrovni řádku nebo pole. V následujícím příkladu můžou transakce zobrazit pouze členové managers skupiny, pokud překročí 1 000 000 KČ. Odpovídající výsledky se odfiltrují pro ostatní uživatele.

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;

Maskování dat

Vzhledem k tomu, že zobrazení v katalogu Unity používají Spark SQL, můžete implementovat pokročilé maskování dat pomocí složitějších výrazů SQL a regulárních výrazů. V následujícím příkladu můžou všichni uživatelé analyzovat e-mailové domény, ale jenom členové auditors skupiny můžou zobrazit celou e-mailovou adresu uživatele.

-- 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