Hive metaadattár-jogosultságok és biztonságos objektumok (örökölt)
Ez a cikk az örökölt Azure Databricks Hive-metaadattár jogosultsági modelljét ismerteti, amely az egyes Azure Databricks-munkaterületekbe van beépítve. Azt is ismerteti, hogyan adhat, tagadhat meg és vonhat vissza jogosultságokat a beépített Hive-metaadattárban lévő objektumokhoz. A Unity Catalog egy másik modellt használ a jogosultságok megadásához. Lásd: Unity Catalog-jogosultságok és biztonságos objektumok.
Feljegyzés
A Hive metaadattár által kezelt adatok táblahozzáférés-vezérlése régi adatszabályozási modell. A Databricks azt javasolja, hogy frissítse a Hive metaadattár által kezelt táblákat a Unity Catalog metaadattárra. A Unity katalógus leegyszerűsíti az adatok biztonságát és szabályozását azáltal, hogy egy központi helyen teszi lehetővé a több munkaterületen lévő adatokhoz való hozzáférés adminisztrálását és auditálást az Ön fiókjában. Ha többet szeretne megtudni arról, hogy az örökölt jogosultsági modell miben különbözik a Unity Catalog jogosultságmodelljétől, olvassa el a Unity Catalog és az örökölt Hive-metaadattár használatát ismertető témakört.
Követelmények
- A rendszergazdáknak engedélyeznie és kikényszerítenie kell a táblahozzáférés-vezérlést a munkaterületen.
- A fürtnek engedélyeznie kell a táblahozzáférés-vezérlést.
Feljegyzés
- Az adathozzáférés-vezérlés mindig engedélyezve van a Databricks SQL-ben akkor is, ha a táblahozzáférés-vezérlés nincs engedélyezve a munkaterületen.
- Ha a táblahozzáférés-vezérlés engedélyezve van a munkaterületen, és már megadott ACL-eket (megadott és megtagadott jogosultságokat) a munkaterületen, a Databricks SQL tiszteletben tartja ezeket az ACL-eket.
Jogosultságok kezelése objektumokon a Hive metaadattárban
A Hive metaadattár által kezelt adatobjektumokra vonatkozó jogosultságokat a munkaterület rendszergazdája vagy az objektum tulajdonosa adhat meg. A Hive metaadattár-objektumaihoz tartozó jogosultságokat SQL-parancsokkal kezelheti.
Az SQL-jogosultságok kezeléséhez a GRANT, a REVOKE, a DENY, az MSCK és a SHOW GRANTS utasítást használja egy jegyzetfüzetben vagy a Databricks SQL-lekérdezésszerkesztőben a szintaxis használatával:
GRANT privilege_type ON securable_object TO principal
Ahol:
privilege_type
Hive metaadattár-jogosultságtípussecurable_object
biztonságos objektum a Hive metaadattárbanprincipal
egy felhasználó, szolgáltatásnév (amelyet az applicationId értéke jelöl) vagy csoport. A felhasználókat, a szolgáltatásneveket és a csoportneveket speciális karakterekkel kell mellékelnie a háttérrendszerekbe (` `
). Lásd: Egyszerű.
Ha jogosultságot szeretne adni a munkaterület összes felhasználójának, adja meg a jogosultságot a users
csoportnak. Példa:
GRANT SELECT ON TABLE <schema-name>.<table-name> TO users
További információ a Hive-metaadattárban lévő objektumok jogosultságainak SQL-parancsokkal történő kezeléséről: Jogosultságok és biztonságos objektumok a Hive-metaadattárban.
A táblahozzáférés-vezérlést egy teljesen automatizált beállításban is kezelheti a Databricks Terraform szolgáltató és a databricks_sql_permissions használatával.
Objektumok tulajdonjoga
Ha a táblahozzáférés-vezérlés engedélyezve van egy fürtön vagy SQL Warehouse-on, a sémát, táblát, nézetet vagy függvényt létrehozó felhasználó lesz a tulajdonosa. A tulajdonos minden jogosultságot megkap, és jogosultságokat adhat más felhasználóknak.
A csoportok rendelkezhetnek objektumokkal, ebben az esetben a csoport minden tagja tulajdonosnak minősül.
Az objektum tulajdonosa vagy a munkaterület rendszergazdája az alábbi paranccsal ruházhatja át egy objektum tulajdonjogát:
ALTER <object> OWNER TO `<user-name>@<user-domain>.com`
Feljegyzés
Ha a táblahozzáférés-vezérlés le van tiltva egy fürtön vagy sql warehouse-on, a rendszer nem regisztrálja a tulajdonosokat séma, tábla vagy nézet létrehozásakor. A munkaterület rendszergazdájának tulajdonost kell hozzárendelnie az objektumhoz a ALTER <object> OWNER TO
parancs használatával.
Biztonságos objektumok a Hive metaadattárban
A biztonságos objektumok a következők:
CATALOG
: a teljes adatkatalógushoz való hozzáférést szabályozza.SCHEMA
: egy sémához való hozzáférést szabályozza.TABLE
: a felügyelt vagy külső táblákhoz való hozzáférést szabályozza.VIEW
: az SQL-nézetekhez való hozzáférést szabályozza.FUNCTION
: egy elnevezett függvényhez való hozzáférést szabályozza.
ANONYMOUS FUNCTION
: a névtelen vagy ideiglenes függvényekhez való hozzáférést szabályozza.Feljegyzés
ANONYMOUS FUNCTION
az objektumok nem támogatottak a Databricks SQL-ben.ANY FILE
: a mögöttes fájlrendszerhez való hozzáférést szabályozza.Figyelmeztetés
A hozzáféréssel
ANY FILE
rendelkező felhasználók közvetlenül a fájlrendszerből olvasva megkerülhetik a katalógusra, sémákra, táblákra és nézetekre vonatkozó korlátozásokat.
Feljegyzés
A globális és helyi ideiglenes nézetekre vonatkozó jogosultságok nem támogatottak. A helyi ideiglenes nézetek csak ugyanabban a munkamenetben láthatók, a sémában global_temp
létrehozott nézetek pedig a fürtöt vagy SQL Warehouse-t használó összes felhasználó számára láthatók. Az alapul szolgáló táblák és az ideiglenes nézetek által hivatkozott nézetek jogosultságai azonban kikényszeríthetők.
Hive metaadattár-objektumokon megadható jogosultságok
SELECT
: olvasási hozzáférést biztosít egy objektumhoz.CREATE
: lehetővé teszi egy objektum (például egy séma táblázatának) létrehozását.MODIFY
: lehetővé teszi adatok hozzáadását, törlését és módosítását egy objektumhoz vagy objektumból.USAGE
: nem ad semmilyen képességet, de további követelmény, hogy bármilyen műveletet végrehajtson egy sémaobjektumon.READ_METADATA
: lehetővé teszi egy objektum és metaadatainak megtekintését.CREATE_NAMED_FUNCTION
: lehetővé teszi egy névvel ellátott UDF létrehozását egy meglévő katalógusban vagy sémában.MODIFY_CLASSPATH
: lehetővé teszi fájlok hozzáadását a Spark-osztály elérési útjára.ALL PRIVILEGES
: az összes jogosultságot megadja (az összes fenti jogosultságra lefordítva).
Feljegyzés
A MODIFY_CLASSPATH
jogosultság nem támogatott a Databricks SQL-ben.
USAGE
Kiváltság
Ha műveletet szeretne végrehajtani egy sémaobjektumon a Hive-metaadattárban, a felhasználónak a művelet végrehajtásához szükséges jogosultságon felül rendelkeznie kell a USAGE
sémára vonatkozó jogosultsággal. Az alábbiak bármelyike megfelel a USAGE
követelménynek:
- Munkaterület rendszergazdája
- Jogosultsággal rendelkezik
USAGE
a sémában, vagy olyan csoportban kell lennie, amely rendelkezik aUSAGE
sémán lévő jogosultsággal - Jogosultsággal
USAGE
rendelkezik egyCATALOG
olyan csoportban, amely rendelkezik jogosultsággalUSAGE
- Legyen a séma tulajdonosa, vagy legyen a séma tulajdonosa
Még a sémán belüli objektumok tulajdonosának is rendelkeznie kell a USAGE
jogosultsággal a használatához.
Jogosultsági hierarchia
Ha a táblahozzáférés-vezérlés engedélyezve van a munkaterületen és az összes fürtön, az Azure Databricks SQL-objektumai hierarchikusak, a jogosultságok pedig lefelé öröklődnek. Ez azt jelenti, hogy a jogosultság megadása vagy megtagadása automatikusan CATALOG
megadja vagy megtagadja a jogosultságot a katalógus összes sémája számára. Hasonlóképpen, a sémaobjektumokon megadott jogosultságokat a séma összes objektuma örökli. Ez a minta minden biztonságos objektumra igaz.
Ha megtagadja egy tábla felhasználói jogosultságait, a felhasználó nem látja a táblát, ha megkísérli listázni a séma összes tábláját. Ha megtagad egy felhasználói jogosultságot egy sémán, a felhasználó nem látja, hogy a séma létezik, ha megkísérli listázni a katalógus összes sémáját.
Dinamikus nézetfüggvények
Az Azure Databricks két felhasználói függvényt tartalmaz, amelyek lehetővé teszik az oszlop- és sorszintű engedélyek dinamikus kifejezését a Hive metaadattár által felügyelt nézetdefiníció törzsében.
current_user()
: adja vissza az aktuális felhasználónevet.is_member()
: állapítsa meg, hogy az aktuális felhasználó tagja-e egy adott Azure Databricks-csoportnak a munkaterület szintjén.
Az alábbi példa mindkét függvényt egyesíti annak megállapításához, hogy egy felhasználó rendelkezik-e a megfelelő csoporttagsággal:
-- 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
Oszlopszintű engedélyek
Dinamikus nézetekkel korlátozhatja, hogy egy adott csoport vagy felhasználó milyen oszlopokat lát. Vegye figyelembe az alábbi példát, amelyben csak a auditors
csoporthoz tartozó felhasználók láthatják a sales_raw
táblázat e-mail-címét. Az elemzés során a Spark a CASE
konstansra 'REDACTED'
vagy az oszlopra email
cseréli az utasítást. Ez a viselkedés lehetővé teszi a Spark által biztosított összes szokásos teljesítményoptimalizálást.
-- 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
Sorszintű engedélyek
Dinamikus nézetek használatával a sor- vagy mezőszintig megadhatja az engedélyeket. Vegye figyelembe az alábbi példát, amelyben csak a csoporthoz tartozó felhasználók láthatják az managers
1 000 000,00 usd-nél nagyobb tranzakcióösszegeket (total
oszlopot):
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;
Adatmaszkolás
Ahogy az előző példákban is látható, oszlopszintű maszkolást alkalmazhat, hogy a felhasználók ne láthassák az adott oszlopadatokat, hacsak nem a megfelelő csoportban vannak. Mivel ezek a nézetek standard Spark SQL-nek számítanak, összetettebb SQL-kifejezésekkel speciálisabb maszkolást végezhet. Az alábbi példa lehetővé teszi, hogy az összes felhasználó elemezni tudja az e-mail-tartományokat, de a csoport tagjai megtekinthetik a auditors
felhasználók 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_group_member('auditors') THEN email
ELSE regexp_extract(email, '^.*@(.*)$', 1)
END
FROM sales_raw