Megosztás:


Dinamikus nézet létrehozása

A Unity Catalogban dinamikus nézetekkel konfigurálhatja a részletes hozzáférés-vezérlést, beleértve a következőket:

  • Biztonság oszlopok vagy sorok szintjén.
  • Adatmaszkolás.

A Unity Catalog a következő függvényeket mutatja be, amelyekkel dinamikusan korlátozhatja, hogy mely felhasználók férhetnek hozzá egy sorhoz, oszlophoz vagy rekordhoz egy nézetben:

  • current_user(): Az aktuális felhasználó e-mail-címét adja vissza.
  • is_account_group_member(): Akkor adja TRUE vissza, ha az aktuális felhasználó egy adott fiókszintű csoport tagja. Dinamikus nézetekben való használatra ajánlott a Unity Catalog adataival szemben.
  • is_member(): Akkor adja TRUE vissza, ha az aktuális felhasználó egy adott munkaterületszintű csoport tagja. Ez a függvény a meglévő Hive metaadattárral való kompatibilitás érdekében érhető el. Kerülje a használatát a Unity Catalog adatokkal kapcsolatos nézeteknél, mivel nem értékeli a fiókszintű csoporttagságot.

Az Azure Databricks azt javasolja, hogy ne engedélyezze a felhasználóknak a nézetben hivatkozott táblák és nézetek olvasását.

Az alábbi példák bemutatják, hogyan hozhat létre dinamikus nézeteket a Unity Catalogban.

Mielőtt elkezdené

Dinamikus nézetek létrehozásához vagy olvasásához a követelmények megegyeznek a standard nézetekkövetelményekkel, kivéve a számítási követelményeket. A következő számítási erőforrások egyikét kell használnia:

  • EGY SQL-raktár.
  • Számítás standard hozzáférési móddal (korábban megosztott hozzáférési mód).
  • A Databricks Runtime 15.4 LTS vagy újabb verzióján dedikált hozzáférési móddal (korábban egyfelhasználós hozzáférési móddal) végzett számítás.

A Databricks Runtime 15.3-on vagy alatta nem olvashat dinamikus nézeteket dedikált számítással.

A Databricks Runtime 15.4 LTS és újabb verzióiban biztosított adatszűrés előnyeinek kihasználásához azt is ellenőriznie kell, hogy a munkaterület engedélyezve van-e a kiszolgáló nélküli számítási, mert a dinamikus nézeteket támogató adatszűrési funkciók kiszolgáló nélküli számításon futnak. Előfordulhat, hogy fizetnie kell a szerver nélküli számítási erőforrások használatáért, amikor dedikált számítással olvassa a dinamikus nézeteket. Lásd a részletes hozzáférés-vezérlést dedikált számítások esetén.

Oszlopszintű engedélyek

Dinamikus nézetben korlátozhatja azokat az oszlopokat, amelyekhez egy adott felhasználó vagy csoport hozzáférhet. Az alábbi példában csak a auditors csoport tagjai férhetnek hozzá az e-mail-címekhez a sales_raw táblából. A lekérdezéselemzés során az Apache Spark a CASE utasítást a literális sztringre REDACTED vagy az e-mail-cím oszlop tényleges tartalmára cseréli. A többi oszlop a szokásos módon lesz visszaadva. Ez a stratégia nem befolyásolja negatívan a lekérdezés teljesítményét.

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

Sorszintű engedélyek

Dinamikus nézettel a sor- vagy mezőszintig megadhatja az engedélyeket. Az alábbi példában csak a csoport tagjai tekinthetik meg az managers 1 000 000 USD-t meghaladó tranzakcióösszegeket. Az egyező eredmények szűrése más felhasználók számára történik.

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;

Adatmaszkolás

Mivel a Unity Catalog nézetei Spark SQL-t használnak, összetettebb SQL-kifejezések és reguláris kifejezések használatával speciális adatmaszkolást valósíthat meg. Az alábbi példában minden felhasználó elemezheti az e-mail-tartományokat, de csak a csoport tagjai tekinthetik meg a auditors felhasználó teljes e-mail-címét.

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