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

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 dat katalogu Unity, protože nevyhodnocuje členství ve skupinách na úrovni účtu.

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

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

Než začnete

Pokud chcete vytvořit nebo číst dynamická zobrazení, požadavky jsou stejné jako požadavky pro standardní zobrazenís výjimkou požadavků na výpočetní prostředky. Musíte použít jeden z následujících výpočetních prostředků:

  • SQL Warehouse.

  • Výpočty s režimem sdíleného přístupu

  • Výpočty s režimem přístupu jednoho uživatele v Databricks Runtime 15.4 LTS nebo vyšší.

    Dynamická zobrazení se nedají číst pomocí výpočetní síly jednoho uživatele v Databricks Runtime 15.3 nebo starší.

    Pokud chcete využít filtrování dat poskytované v Databricks Runtime 15.4 LTS a novější, musíte také ověřit, že váš pracovní prostor je aktivován pro bezserverové výpočetní prostředky, protože funkce filtrování dat podporující dynamická zobrazení běží na bezserverových výpočetních prostředcích. Proto se vám můžou účtovat poplatky za bezserverové výpočetní prostředky, když ke čtení dynamických zobrazení použijete výpočetní prostředky s jedním uživatelem. Podívejte se na podrobné řízení přístupu u výpočetních prostředků jednoho uživatele.

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 tabulky sales_raw přístup jenom členové skupiny auditors. Během analýzy dotazů Nahradí Apache Spark příkaz CASE 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