Udostępnij przez


Zarządzanie uprawnieniami

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 .

  1. Kliknij pozycję Obliczenia na pasku bocznym obszaru roboczego.
  2. Kliknij pozycję Baza danych OLTP.
  3. Kliknij kartę Uprawnienia .
  4. Kliknij pozycję Zarządzaj uprawnieniami wystąpienia w prawym górnym rogu.
  5. Wprowadź użytkownika, grupę lub jednostkę usługi, aby udzielić dodatkowych uprawnień.
  6. Wybierz uprawnienia, które chcesz przyznać tożsamości. Zobacz Listy ACL wystąpień bazy danych.
  7. Kliknij pozycję + Dodaj.
  8. 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.
  9. 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:

  • CONNECT w bazie danych
  • USAGE w schemacie (lub CREATE w celu utworzenia nowych tabel)
  • SELECT, INSERT, UPDATElub DELETE w 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;