Oprávnění metastoru Hive a zabezpečitelné objekty (starší verze)

Tento článek popisuje model oprávnění pro starší metastore Azure Databricks Hive, který je integrovaný do každého pracovního prostoru Azure Databricks. Popisuje také, jak udělit, odepřít a odvolat oprávnění pro objekty v integrovaném metastoru Hive. Katalog Unity používá pro udělení oprávnění jiný model. Viz oprávnění katalogu Unity a zabezpečitelné objekty.

Poznámka:

Řízení přístupu k tabulce pro data spravovaná metastorem Hive je starší model zásad správného řízení dat. Databricks doporučuje upgradovat tabulky spravované metastorem Hive na metastore katalogu Unity. Katalog Unity zjednodušuje zabezpečení a zásady řízení dat tím, že poskytuje centrální místo pro správu a auditování přístupu k datům ve více pracovních prostorech ve vašem účtu. Další informace o tom, jak se model starších oprávnění liší od modelu oprávnění katalogu Unity, najdete v tématu Práce s katalogem Unity a starším metastorem Hive.

Požadavky

Poznámka:

  • Řízení přístupu k datům je v Databricks SQL vždy povolené i v případě, že pro pracovní prostor není povolené řízení přístupu k tabulce.
  • Pokud je pro pracovní prostor povolené řízení přístupu k tabulce a už jste v pracovním prostoru zadali seznamy ACL (udělená a odepřená oprávnění), budou tyto seznamy ACL v Databricks SQL dodrženy.

Správa oprávnění k objektům v metastoru Hive

Oprávnění k datovým objektům spravovaným metastorem Hive může udělit správce pracovního prostoru nebo vlastník objektu. Oprávnění pro objekty metastoru Hive můžete spravovat pomocí příkazů SQL.

Ke správě oprávnění v SQL použijete příkazy GRANT, REVOKE, DENY, MSCK a SHOW GRANT v poznámkovém bloku nebo v editoru dotazů SQL Databricks pomocí syntaxe:

GRANT privilege_type ON securable_object TO principal

Kde:

Pokud chcete udělit oprávnění všem uživatelům ve vašem pracovním prostoru, udělte skupině users oprávnění. Příklad:

GRANT SELECT ON TABLE <schema-name>.<table-name> TO users

Další informace o správě oprávnění pro objekty v metastoru Hive pomocí příkazů SQL naleznete v tématu Oprávnění a zabezpečitelné objekty v metastoru Hive.

Řízení přístupu k tabulce můžete spravovat také v plně automatizovaném nastavení pomocí poskytovatele Databricks Terraform a databricks_sql_permissions.

Vlastnictví objektů

Když je v clusteru nebo SQL Warehouse povolené řízení přístupu k tabulce, stane se uživatel, který vytvoří schéma, tabulku, zobrazení nebo funkci. Vlastník má udělená všechna oprávnění a může udělit oprávnění jiným uživatelům.

Skupiny mohou vlastnit objekty, v takovém případě jsou všichni členové této skupiny považováni za vlastníky.

Vlastník objektu nebo správce pracovního prostoru může vlastnictví objektu převést pomocí následujícího příkazu:

ALTER <object> OWNER TO `<user-name>@<user-domain>.com`

Poznámka:

Pokud je řízení přístupu k tabulce v clusteru nebo SQL Warehouse zakázané, vlastníci se při vytvoření schématu, tabulky nebo zobrazení nezaregistrují. Správce pracovního prostoru musí objektu přiřadit pomocí příkazu vlastníka ALTER <object> OWNER TO .

Zabezpečitelné objekty v metastoru Hive

Zabezpečitelné objekty jsou:

  • CATALOG: řídí přístup k celému katalogu dat.

    • SCHEMA: řídí přístup ke schématu.
      • TABLE: Řídí přístup ke spravované nebo externí tabulce.
      • VIEW: Řídí přístup k zobrazením SQL.
      • FUNCTION: řídí přístup k pojmenované funkci.
  • ANONYMOUS FUNCTION: řídí přístup k anonymním nebo dočasným funkcím.

    Poznámka:

    ANONYMOUS FUNCTION Databricks SQL nepodporuje objekty.

  • ANY FILE: řídí přístup k základnímu systému souborů.

    Upozorňující

    Uživatelé, kterým ANY FILE byl udělen přístup, můžou obejít omezení v katalogu, schématech, tabulkách a zobrazeních čtením přímo ze systému souborů.

Poznámka:

Oprávnění ke globálním a místním dočasným zobrazením nejsou podporována. Místní dočasná zobrazení jsou viditelná pouze ve stejné relaci a zobrazení vytvořená ve schématu global_temp jsou viditelná pro všechny uživatele, kteří sdílejí cluster nebo SQL Warehouse. Oprávnění k podkladovým tabulkám a zobrazením, na která odkazují jakákoli dočasná zobrazení, se však vynucují.

Oprávnění, která můžete udělit pro objekty metastoru Hive

  • SELECT: poskytuje přístup pro čtení k objektu.
  • CREATE: umožňuje vytvořit objekt (například tabulku ve schématu).
  • MODIFY: umožňuje přidávat, odstraňovat a upravovat data do nebo z objektu.
  • USAGE: neposkytuje žádné schopnosti, ale je dalším požadavkem na provedení jakékoli akce u objektu schématu.
  • READ_METADATA: umožňuje zobrazit objekt a jeho metadata.
  • CREATE_NAMED_FUNCTION: umožňuje vytvořit pojmenovanou funkci definovanou uživatelem v existujícím katalogu nebo schématu.
  • MODIFY_CLASSPATH: umožňuje přidat soubory do cesty třídy Spark.
  • ALL PRIVILEGES: uděluje všechna oprávnění (jsou přeložena do všech výše uvedených oprávnění).

Poznámka:

Oprávnění MODIFY_CLASSPATH není podporováno v Databricks SQL.

USAGE Oprávnění

Aby uživatel mohl provést akci s objektem schématu v metastoru Hive, musí mít USAGE kromě oprávnění k provedení této akce oprávnění oprávnění k housle. Jakýkoli z následujících požadavků splňuje USAGE :

  • Být správcem pracovního prostoru
  • USAGE Mít oprávnění ke schématu nebo být ve skupině, která má USAGE oprávnění ke schématu
  • USAGE Mít oprávnění nebo CATALOG být ve skupině, která má oprávnění USAGE
  • Být vlastníkem schématu nebo být ve skupině, která vlastní schéma

Dokonce i vlastník objektu uvnitř schématu musí mít USAGE oprávnění k jeho použití.

Hierarchie oprávnění

Pokud je v pracovním prostoru a ve všech clusterech povolené řízení přístupu k tabulce, jsou objekty SQL v Azure Databricks hierarchické a oprávnění se dědí směrem dolů. To znamená, že udělení nebo zamítnutí oprávnění k CATALOG automatickému udělení nebo odepření oprávnění všem schématům v katalogu. Podobně jsou oprávnění udělená objektem schématu zděděna všemi objekty v daném schématu. Tento vzor platí pro všechny zabezpečitelné objekty.

Pokud uživateli odepřete oprávnění k tabulce, uživatel nemůže zobrazit tabulku tím, že se pokusí zobrazit seznam všech tabulek ve schématu. Pokud uživateli odepřete oprávnění ke schématu, uživatel neuvidí, že schéma existuje, když se pokusí vypsat všechna schémata v katalogu.

Funkce dynamického zobrazení

Azure Databricks obsahuje dvě uživatelské funkce, které umožňují dynamicky vyjádřit oprávnění na úrovni sloupců a řádků v textu definice zobrazení spravované metastorem Hive.

  • current_user(): vrátí aktuální uživatelské jméno.
  • is_member(): Určí, jestli je aktuální uživatel členem konkrétní skupiny Azure Databricks na úrovni pracovního prostoru.

Následující příklad kombinuje obě funkce a určí, jestli má uživatel odpovídající členství ve skupině:

-- Return: true if the user is a member and false if they are not
SELECT
  current_user as user,
-- Check to see if the current user is a member of the "Managers" group.
  is_member("Managers") as admin

Oprávnění na úrovni sloupce

Pomocí dynamických zobrazení můžete omezit sloupce, které může konkrétní skupina nebo uživatel zobrazit. Podívejte se na následující příklad, kdy z tabulky uvidí e-mailové adresy sales_raw jenom uživatelé, kteří patří do auditors skupiny. V době analýzy Spark nahradí CASE příkaz literálem 'REDACTED' nebo sloupcem email. Toto chování umožňuje všechny obvyklé optimalizace výkonu poskytované Sparkem.

-- 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_group_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

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

Pomocí dynamických zobrazení můžete zadat oprávnění dolů na úroveň řádku nebo pole. Podívejte se na následující příklad, kdy pouze uživatelé, kteří patří do managers skupiny, uvidí částky transakcí (total sloupec) větší než 1 000 000,000 KČ:

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  country,
  product,
  total
FROM sales_raw
WHERE
  CASE
    WHEN is_group_member('managers') THEN TRUE
    ELSE total <= 1000000
  END;

Maskování dat

Jak je znázorněno v předchozích příkladech, můžete implementovat maskování na úrovni sloupců, abyste uživatelům zabránili v zobrazení konkrétních dat sloupců, pokud nejsou ve správné skupině. Vzhledem k tomu, že tato zobrazení jsou standardní Spark SQL, můžete provádět pokročilejší typy maskování pomocí složitějších výrazů SQL. Následující příklad umožňuje všem uživatelům provádět analýzu e-mailových domén, ale umožňuje členům auditors skupiny zobrazit úplné e-mailové adresy uživatelů.

-- 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_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw