Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Ta funkcja jest dostępna w wersji próbnej w następujących regionach: westus, westus2, eastus, eastus2, centralus, southcentralus, northeurope, westeurope, australiaeast, brazilsouth, canadacentral, centralindia, southeastasia, uksouth.
Na tej stronie opisano, kiedy i jak udzielić użytkownikom i tożsamościom usługi Azure Databricks uprawnień do wystąpienia bazy danych.
Aby zezwolić innym użytkownikom na dostęp do wystąpienia bazy danych za pomocą PostgreSQL, databricks_superuser musi utworzyć dla nich odpowiednie role w PostgreSQL. Aby uzyskać szczegółowe informacje na temat tworzenia ról Postgres, zobacz Zarządzanie rolami postgresu.
Kiedy i jak są sprawdzane uprawnienia
W przypadku używania składni bazy danych Postgres lub nawiązywania połączenia za pośrednictwem interfejsu PostgreSQL usługa Lakebase wymusza mechanizmy kontroli dostępu specyficzne dla bazy danych PostgreSQL przy użyciu następujących elementów:
- Role postgres
- Członkostwa w rolach
- Uprawnienia przyznane przez usługę Postgres
We wszystkich innych scenariuszach usługa Lakebase wymusza kontrolę dostępu specyficzną dla usługi Databricks:
- Tożsamości usługi Azure Databricks (użytkownicy, grupy i jednostki usługi)
- Członkostwa w grupach usługi Azure Databricks
- Listy kontroli dostępu do obszaru roboczego (ACL)
- Uprawnienia katalogu Unity
Uwaga / Notatka
Nie ma automatycznej synchronizacji między tożsamościami i członkostwem usługi Azure Databricks oraz rolami i członkostwem Postgres.
| Przypadek użycia / Uprawnienie lub tożsamość | Zarządzanie wystąpieniami bazy danych | Tworzenie lub usuwanie zsynchronizowanych tabel | Zarządzanie zsynchronizowanym potokiem tabeli | Wykonywanie zapytań względem tabel Postgres z usługi SQL Warehouse | Wykonywanie zapytań dotyczących funkcji online i obsługi modeli | Wykonywanie zapytań względem tabel Bazy danych Postgres w usłudze PostgreSQL |
|---|---|---|---|---|---|---|
| Tożsamości usługi Azure Databricks | ✅ | ✅ | ✅ | ✅ | ✅ | Wymaga odpowiedniej roli Postgres |
| Członkostwa w grupach Databricks | ✅ | ✅ | ✅ | ✅ | ✅ | Sprawdzanie odbywa się tylko podczas logowania jako grupa |
| Listy ACL wystąpień | ✅ | ✅ | ||||
| Listy ACL potoku | Trzeba być właścicielem pipeline'u, aby ponownie użyć istniejącego pipeline'u lub usunąć zsynchronizowaną tabelę (co modyfikuje pipeline) | ✅ | ||||
| Uprawnienia interfejsu użytkownika | ✅ | ✅ | ✅ | |||
| Role postgres | ✅ | |||||
| Członkostwa w rolach Postgres | ✅ | |||||
| Uprawnienia bazy danych Postgres | ✅ |
Uprawnienia wystąpienia bazy danych
Użytkownik musi mieć określone uprawnienia na instancji bazy danych, aby zarządzać instancją i wykonywać operacje na tabelach w interfejsie użytkownika, API lub SDK usługi Azure Databricks. Administratorzy obszaru roboczego i twórca wystąpienia mogą przypisywać dodatkowe uprawnienia do wszystkich żądanych użytkowników, grup lub jednostek usługi na stronie przeglądu wystąpień bazy danych .
- Kliknij pozycję Obliczenia na pasku bocznym obszaru roboczego.
- Kliknij pozycję Baza danych OLTP.
- Kliknij kartę Uprawnienia .
- Kliknij pozycję Zarządzaj uprawnieniami wystąpienia w prawym górnym rogu.
- Wprowadź użytkownika, grupę lub jednostkę usługi, aby udzielić dodatkowych uprawnień.
- Wybierz uprawnienia, które chcesz przyznać tożsamości. Zobacz Listy ACL wystąpień bazy danych.
- Kliknij pozycję + Dodaj.
- Każdy użytkownik obszaru roboczego może wyświetlać lub wymieniać wystąpienia bazy danych. Uprawnienia katalogu bazy danych i synchronizowanej tabeli są dodatkowo zarządzane przez magazyn metadanych Unity Catalog, oraz uprawnienia katalogu, schematu i tabeli. Aby uzyskać więcej informacji, odwiedź stronę Zarządzanie uprawnieniami w katalogu Unity Catalog.
- Kliknij przycisk Zapisz.
Uprawnienia bazy danych Postgres
Aby odczytać lub zapisać w tabeli w usłudze Postgres, użytkownicy muszą mieć następujące uprawnienia w usłudze Postgres:
-
CONNECTw bazie danych -
USAGEw schemacie (lubCREATEw celu utworzenia nowych tabel) -
SELECT,INSERT,UPDATElubDELETEw tabeli
Pełną listę uprawnień bazy danych Postgres można znaleźć w dokumentacji bazy danych PostgreSQL.
Sprawdzanie uprawnień użytkownika w określonej tabeli w usłudze Postgres
Uruchom następującą instrukcję SQL, aby utworzyć funkcję o nazwie pg_temp.check_permissions , która sprawdza uprawnienia użytkownika, w tym uprawnienia dziedziczone.
CREATE OR REPLACE FUNCTION pg_temp.check_permissions(TEXT, TEXT, TEXT, TEXT)
RETURNS TABLE(database_connect BOOLEAN, schema_usage BOOLEAN, table_select BOOLEAN,
table_insert BOOLEAN, table_update BOOLEAN, table_delete BOOLEAN) AS $$
SELECT
has_database_privilege($1, $2, 'CONNECT'),
has_schema_privilege($1, $3, 'USAGE'),
has_table_privilege($1, $4, 'SELECT'),
has_table_privilege($1, $4, 'INSERT'),
has_table_privilege($1, $4, 'UPDATE'),
has_table_privilege($1, $4, 'DELETE')
$$ LANGUAGE sql
;
Aby użyć funkcji, użyj następującego zapytania:
SELECT * FROM pg_temp.check_permissions('<your_user>', '<your_database>', '<your_schema>', '<your_table>');
-- Example:
SELECT * FROM pg_temp.check_permissions('joe@acme.org', 'databricks_postgres', 'public', 'table1');
Wyświetlanie wszystkich uprawnień dla bazy danych, schematu i tabeli w usłudze Postgres
Poniższa instrukcja SQL tworzy funkcję o nazwie pg_temp.make_owner_acl , która zwraca szczegółowy widok wszystkich udzielonych uprawnień, z wyłączeniem uprawnień dziedziczynych dla wszystkich użytkowników:
CREATE OR REPLACE FUNCTION pg_temp.make_owner_acl(owner_oid OID)
RETURNS TABLE(grantor OID, grantee OID, privilege_type TEXT, is_grantable BOOLEAN) AS $$
SELECT owner_oid, owner_oid,'OWNER'::TEXT, True
$$ LANGUAGE SQL;
CREATE OR REPLACE FUNCTION pg_temp.get_all_permissions(TEXT, TEXT, TEXT)
RETURNS TABLE(type TEXT, name TEXT, role TEXT, acl TEXT, can_grant TEXT) AS $$
SELECT type, name,
CASE WHEN grantee = 0 THEN 'PUBLIC' ELSE pg_get_userbyid(grantee) END AS role, privilege_type,
CASE WHEN privilege_type = 'OWNER' THEN 'YES, ALL' WHEN is_grantable THEN 'YES' ELSE 'NO' END AS can_grant
FROM (
SELECT 'DATABASE' type, datname as name, (pg_temp.make_owner_acl(datdba)).*
FROM pg_database
WHERE datname = $1
UNION ALL
SELECT 'DATABASE' type, datname as name, (aclexplode(datacl)).*
FROM pg_database
WHERE datname = $1
UNION ALL
SELECT 'SCHEMA' type, nspname as name, (pg_temp.make_owner_acl(nspowner)).*
FROM pg_namespace
WHERE nspname = $2
UNION ALL
SELECT 'SCHEMA' type, nspname as name, (aclexplode(nspacl)).*
FROM pg_namespace
WHERE nspname = $2
UNION ALL
SELECT 'TABLE' type, relname as name, (pg_temp.make_owner_acl(relowner)).*
FROM pg_class
WHERE relname = $3
UNION ALL
SELECT 'TABLE' type, relname as name, (aclexplode(relacl)).*
FROM pg_class
WHERE relname = $3
)
$$ LANGUAGE SQL
;
Aby użyć funkcji, użyj następującego zapytania:
SELECT * FROM pg_temp.get_all_permissions('<your_database>', '<your_schema>', '<your_table>');
-- Example:
SELECT * FROM pg_temp.get_all_permissions('databricks_postgres', 'public', 'table1');
Sprawdzanie hierarchii dziedziczenia ról w usłudze Postgres
W usłudze Postgres rola może być członkiem innej roli, a członkostwo określa, czy uprawnienia są dziedziczone z roli nadrzędnej. Aby wyświetlić wszystkie role, których częścią jest określona rola, użyj następującej instrukcji SQL, aby utworzyć funkcję pg_temp.get_inherited_rolesSQL :
CREATE OR REPLACE FUNCTION pg_temp.get_inherited_roles(
role_name TEXT
)
RETURNS TABLE(inherited_roles TEXT, member_via TEXT, inherits_permissions TEXT) AS $$
WITH RECURSIVE role_tree AS (
SELECT
m.roleid,
pg_get_userbyid(m.roleid) rolname,
'DIRECT' COLLATE "C" as member_via,
m.inherit_option as inherits_permissions
FROM pg_auth_members m
WHERE m.member = (SELECT oid FROM pg_roles WHERE rolname = $1)
UNION ALL
SELECT
m.roleid,
pg_get_userbyid(m.roleid) rolname,
rt.rolname::text as member_via,
(rt.inherits_permissions AND m.inherit_option) as inherits_permissions
FROM pg_auth_members m
JOIN role_tree rt ON m.member = rt.roleid
)
SELECT
rolname AS inherited_roles,
member_via,
CASE WHEN inherits_permissions THEN 'YES' ELSE 'NO' END as inherits_permissions
FROM role_tree
GROUP BY inherited_roles, member_via, inherits_permissions
ORDER BY inherits_permissions DESC
$$ LANGUAGE sql
;
Aby użyć funkcji, zastąp <your_user> nazwą użytkownika usługi Azure Databricks:
SELECT * FROM pg_temp.get_inherited_roles('<your role>');
Znajdowanie administratorów ról w usłudze Postgres
Aby wyświetlić administratora roli, użyj następującego zapytania SQL i zastąp nazwę roli :<target_role>
SELECT pg_get_userbyid(m.member) admin
FROM pg_auth_members m
WHERE m.roleid = (SELECT oid FROM pg_roles WHERE rolname = '<target_role>')
AND m.admin_option = true;