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
- Správce musí pro pracovní prostor povolit a vynutit řízení přístupu k tabulce.
- Cluster musí být povolený pro řízení přístupu k tabulce.
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:
privilege_type
je typ oprávnění metastoru Hive.securable_object
je zabezpečitelný objekt v metastoru Hive.principal
je uživatel, instanční objekt (reprezentovaný hodnotou applicationId) nebo skupina. Uživatele, instanční objekty a názvy skupin musíte uzavřít se speciálními znaky v zpětných znacích (` `
). Viz objekt zabezpečení.
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
výsada
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ématuUSAGE
Mít oprávnění neboCATALOG
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