Uprawnienia magazynu metadanych Hive i zabezpieczane obiekty (starsza wersja)
W tym artykule opisano model uprawnień dla starszego magazynu metadanych hive usługi Azure Databricks, który jest wbudowany w każdy obszar roboczy usługi Azure Databricks. W tym artykule opisano również sposób udzielania, odmowy i odwoływanie uprawnień dla obiektów w wbudowanym magazynie metadanych Hive. Wykaz aparatu Unity używa innego modelu do udzielania uprawnień. Zobacz Uprawnienia wykazu aparatu Unity i zabezpieczane obiekty.
Uwaga
Kontrola dostępu do tabel dla danych zarządzanych przez magazyn metadanych Hive to starszy model zapewniania ładu danych. Usługa Databricks zaleca uaktualnienie tabel zarządzanych przez magazyn metadanych Hive do magazynu metadanych wykazu aparatu Unity. Unity Catalog upraszcza zabezpieczenia i nadzór nad danymi, zapewniając centralne miejsce do administrowania i inspekcji dostępu do danych w wielu obszarach roboczych na Twoim koncie. Aby dowiedzieć się więcej o tym, jak starszy model uprawnień różni się od modelu uprawnień wykazu aparatu Unity, zobacz Praca z wykazem aparatu Unity i starszym magazynem metadanych Hive.
Wymagania
- Administrator musi włączyć i wymusić kontrolę dostępu do tabel dla obszaru roboczego.
- Klaster musi być włączony dla kontroli dostępu do tabel.
Uwaga
- Kontrola dostępu do danych jest zawsze włączona w usłudze Databricks SQL, nawet jeśli kontrola dostępu do tabel nie jest włączona dla obszaru roboczego.
- Jeśli kontrola dostępu do tabeli jest włączona dla obszaru roboczego i w obszarze roboczym zostały już określone listy ACL (przyznane i odrzucone), te listy ACL są przestrzegane w usłudze Databricks SQL.
Zarządzanie uprawnieniami obiektów w magazynie metadanych Hive
Uprawnienia do obiektów danych zarządzanych przez magazyn metadanych Hive mogą być przyznawane przez administratora obszaru roboczego lub właściciela obiektu. Uprawnienia dla obiektów magazynu metadanych Hive można zarządzać przy użyciu poleceń SQL.
Aby zarządzać uprawnieniami w programie SQL, należy użyć instrukcji GRANT, REVOKE, DENY, MSCK i SHOW GRANTS w notesie lub edytorze zapytań SQL usługi Databricks przy użyciu składni:
GRANT privilege_type ON securable_object TO principal
Gdzie:
privilege_type
jest typem uprawnień magazynu metadanych Hivesecurable_object
jest zabezpieczanym obiektem w magazynie metadanych Hiveprincipal
jest użytkownikiem, jednostką usługi (reprezentowaną przez jego wartość applicationId) lub grupą. Należy ująć użytkowników, jednostki usługi i nazwy grup z znakami specjalnymi w backticks (` `
). Zobacz Principal (Podmiot zabezpieczeń).
Aby przyznać uprawnienie wszystkim użytkownikom w obszarze roboczym, przyznaj users
grupie uprawnienie. Na przykład:
GRANT SELECT ON TABLE <schema-name>.<table-name> TO users
Aby uzyskać więcej informacji na temat zarządzania uprawnieniami dla obiektów w magazynie metadanych Hive przy użyciu poleceń SQL, zobacz Uprawnienia i zabezpieczane obiekty w magazynie metadanych Hive.
Kontrolę dostępu do tabel można również zarządzać w pełni zautomatyzowaną konfiguracją przy użyciu dostawcy narzędzia Terraform usługi Databricks i databricks_sql_permissions.
Własność obiektu
Gdy kontrola dostępu do tabel jest włączona w klastrze lub usłudze SQL Warehouse, użytkownik tworzący schemat, tabelę, widok lub funkcję staje się jego właścicielem. Właściciel otrzymuje wszystkie uprawnienia i może przyznać uprawnienia innym użytkownikom.
Grupy mogą być właścicielami obiektów, w tym przypadku wszyscy członkowie tej grupy są traktowani jako właściciele.
Właściciel obiektu lub administrator obszaru roboczego może przenieść własność obiektu przy użyciu następującego polecenia:
ALTER <object> OWNER TO `<user-name>@<user-domain>.com`
Uwaga
Gdy kontrola dostępu do tabel jest wyłączona w klastrze lub usłudze SQL Warehouse, właściciele nie są zarejestrowani podczas tworzenia schematu, tabeli ani widoku. Administrator obszaru roboczego musi przypisać właściciela do obiektu przy użyciu ALTER <object> OWNER TO
polecenia .
Zabezpieczane obiekty w magazynie metadanych Hive
Zabezpieczane obiekty to:
CATALOG
: kontroluje dostęp do całego wykazu danych.SCHEMA
: kontroluje dostęp do schematu.TABLE
: kontroluje dostęp do zarządzanej lub zewnętrznej tabeli.VIEW
: kontroluje dostęp do widoków SQL.FUNCTION
: kontroluje dostęp do nazwanej funkcji.
ANONYMOUS FUNCTION
: kontroluje dostęp do funkcji anonimowych lub tymczasowych.Uwaga
ANONYMOUS FUNCTION
obiekty nie są obsługiwane w usłudze Databricks SQL.ANY FILE
: kontroluje dostęp do bazowego systemu plików.Ostrzeżenie
Użytkownicy, którym
ANY FILE
udzielono dostępu, mogą pominąć ograniczenia wprowadzone w katalogu, schematach, tabelach i widokach, odczytując bezpośrednio z systemu plików.
Uwaga
Uprawnienia do widoków globalnych i lokalnych tymczasowych nie są obsługiwane. Lokalne widoki tymczasowe są widoczne tylko w ramach tej samej sesji, a widoki utworzone w schemacie global_temp
są widoczne dla wszystkich użytkowników współużytkowanych klastra lub usługi SQL Warehouse. Jednak uprawnienia do bazowych tabel i widoków, do których odwołuje się dowolne widoki tymczasowe, są wymuszane.
Uprawnienia, które można przyznać w obiektach magazynu metadanych Hive
SELECT
: zapewnia dostęp do odczytu do obiektu.CREATE
: daje możliwość utworzenia obiektu (na przykład tabeli w schemacie).MODIFY
: umożliwia dodawanie, usuwanie i modyfikowanie danych do lub z obiektu.USAGE
: nie daje żadnych możliwości, ale jest dodatkowym wymaganiem do wykonania jakiejkolwiek akcji na obiekcie schematu.READ_METADATA
: umożliwia wyświetlanie obiektu i jego metadanych.CREATE_NAMED_FUNCTION
: umożliwia utworzenie nazwanej funkcji zdefiniowanej przez użytkownika w istniejącym wykazie lub schemacie.MODIFY_CLASSPATH
: umożliwia dodawanie plików do ścieżki klasy Spark.ALL PRIVILEGES
: daje wszystkie uprawnienia (są tłumaczone na wszystkie powyższe uprawnienia).
Uwaga
Uprawnienia MODIFY_CLASSPATH
nie są obsługiwane w usłudze Databricks SQL.
USAGE
przywilej
Aby wykonać akcję na obiekcie schematu w magazynie metadanych Hive, użytkownik musi mieć USAGE
uprawnienia do tego schematu oprócz uprawnień do wykonania tej akcji. Każdy z następujących elementów spełnia USAGE
wymagania:
- Być administratorem obszaru roboczego
USAGE
Uprawnienie do schematu lub należy do grupy, która maUSAGE
uprawnienia do schematuUSAGE
Mieć uprawnienia do grupyCATALOG
lub, która maUSAGE
uprawnienia- Być właścicielem schematu lub być w grupie, która jest właścicielem schematu
Nawet właściciel obiektu wewnątrz schematu musi mieć USAGE
uprawnienia, aby go używać.
Hierarchia uprawnień
Gdy kontrola dostępu do tabel jest włączona w obszarze roboczym i we wszystkich klastrach, obiekty SQL w usłudze Azure Databricks są hierarchiczne, a uprawnienia są dziedziczone w dół. Oznacza to, że przyznanie lub odmowę uprawnienia do CATALOG
automatycznego przyznania lub odmowy uprawnień do wszystkich schematów w wykazie. Podobnie uprawnienia przyznane dla obiektu schematu są dziedziczone przez wszystkie obiekty w tym schemacie. Ten wzorzec jest prawdziwy dla wszystkich zabezpieczanych obiektów.
Jeśli odmówisz uprawnień użytkownika w tabeli, użytkownik nie będzie mógł wyświetlić tabeli, próbując wyświetlić listę wszystkich tabel w schemacie. Jeśli odmówisz uprawnień użytkownika w schemacie, użytkownik nie będzie mógł zobaczyć, że schemat istnieje, próbując wyświetlić listę wszystkich schematów w wykazie.
Funkcje widoku dynamicznego
Usługa Azure Databricks zawiera dwie funkcje użytkownika, które umożliwiają dynamiczne wyrażanie uprawnień na poziomie kolumn i wierszy w treści definicji widoku zarządzanej przez magazyn metadanych Hive.
current_user()
: zwraca bieżącą nazwę użytkownika.is_member()
: określ, czy bieżący użytkownik jest członkiem określonej grupy usługi Azure Databricks na poziomie obszaru roboczego.
Poniższy przykład łączy obie funkcje w celu określenia, czy użytkownik ma odpowiednie członkostwo w grupie:
-- 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
Uprawnienia na poziomie kolumny
Możesz użyć widoków dynamicznych, aby ograniczyć kolumny widoczne dla określonej grupy lub użytkownika. Rozważmy następujący przykład, w którym tylko użytkownicy należący do auditors
grupy mogą wyświetlać adresy e-mail z sales_raw
tabeli. W czasie analizy platforma Spark zastępuje instrukcję CASE
literałem 'REDACTED'
lub kolumną email
. To zachowanie umożliwia korzystanie ze wszystkich zwykłych optymalizacji wydajności udostępnianych przez platformę Spark.
-- 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
Uprawnienia na poziomie wiersza
Za pomocą widoków dynamicznych można określić uprawnienia na poziomie wiersza lub pola. Rozważmy następujący przykład, w którym tylko użytkownicy, którzy należą do managers
grupy, mogą zobaczyć kwoty transakcji (total
kolumnę) większą niż $1,000,000.00:
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;
Maskowanie danych
Jak pokazano w poprzednich przykładach, można zaimplementować maskowanie na poziomie kolumny, aby uniemożliwić użytkownikom wyświetlanie określonych danych kolumn, chyba że znajdują się w odpowiedniej grupie. Ponieważ te widoki są standardowymi językami Spark SQL, można wykonywać bardziej zaawansowane typy maskowania za pomocą bardziej złożonych wyrażeń SQL. Poniższy przykład umożliwia wszystkim użytkownikom przeprowadzanie analizy domen poczty e-mail, ale umożliwia członkom auditors
grupy wyświetlanie pełnych adresów e-mail użytkowników.
-- 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