Dela via


Behörigheter i migreringsscenarier för migreringstjänsten

GÄLLER FÖR: Azure Database for PostgreSQL – Flexibel Server

Migreringstjänsten i Azure Database for PostgreSQL innehåller följande inbyggda funktioner för Azure Database for PostgreSQL – enskild server som käll- och datamigrering:

  • Migrerar användarroller från källservern till målservern.
  • Migrerar ägarskapet för alla databasobjekt från källservern till målservern.
  • Migrerar behörigheter för databasobjekt som GRANT och REVOKE från källservern till målservern.

Viktigt!

Du kan bara migrera användare, roller, ägarskap och behörigheter när källan är en flexibel Azure Database for PostgreSQL-server – enskild server. För närvarande är den här funktionen inte tillgänglig för PostgreSQL version 16-servrar.

Viktigt!

Migreringstjänsten stöder inte kopiering av Microsoft Entra ID-autentiserade roller när du använder en körningsserver för att utföra migreringen från enskild server till flexibel server. Vi rekommenderar att du manuellt skapar entra-ID-autentiserade roller på målservern innan du påbörjar migreringen.

Behörigheter på en enskild server jämfört med en flexibel server

I det här avsnittet beskrivs skillnaderna i behörigheter som beviljas för rollen azure_pg_admin i Azure Database for PostgreSQL – Enskild Server och Azure Database for PostgreSQL – Flexibel Server.

pg_catalog schemabehörigheter

Till skillnad från ett användarskapade schema som organiserar databasobjekt i logiska grupper är pg_catalog ett systemschema. Den innehåller viktig information på systemnivå, till exempel information om tabeller, kolumner och andra interna bokföringsdata. Det pg_catalog schemat är där PostgreSQL lagrar viktiga metadata. Behörigheterna varierar mellan miljöer med enskild server och flexibel server:

  • I en enskild servermiljö beviljas en användare som tillhör rollen azure_pg_admin specifika behörigheter för alla pg_catalog tabeller och vyer.
  • I en flexibel servermiljö begränsas behörigheterna för vissa tabeller och vyer så att endast superanvändare kan fråga dem.

Att bevilja obegränsad åtkomst till systemtabeller och vyer i pg_catalog-schemat kan leda till obehöriga ändringar, oavsiktliga borttagningar eller till och med säkerhetsöverträdelser. Begränsad åtkomst minskar risken för oavsiktliga ändringar eller dataexponering.

Vi har tagit bort alla behörigheter för icke-superanvändare i följande pg_catalog tabeller:

  • pg_authid

  • pg_largeobject

  • pg_statistic

  • pg_prenumeration

  • pg_user_mapping

Vi tog bort alla behörigheter för icke-superanvändare för följande pg_catalog vyer:

  • pg_config

  • pg_file_settings

  • pg_hba_file_rules

  • pg_replication_origin_status

  • pg_shadow

pg_pltemplate utfasning

En annan viktig faktor är utfasningen av pg_pltemplate-systemtabellen. Från och med version 13 avvecklar PostgreSQL-communityn pg_pltemplate-systemtabellen i pg_catalog-schemat. Om du migrerar till Azure Database for PostgreSQL – flexibel server version 13 eller senare och du har beviljat behörigheter till användare i tabellen pg_pltemplate på din enda server måste du återkalla dessa behörigheter innan du påbörjar en migrering.

Effekter

I följande lista beskrivs viktiga effekter av pg_pltemplate utfasning:

  • Om ditt program är utformat för att fråga relevanta tabeller och vyer direkt uppstår problem när du migrerar till en flexibel server. Vi rekommenderar starkt att du omstrukturerar ditt program för att undvika direkta frågor till dessa systemtabeller.

  • Om du har beviljat eller återkallat behörigheter till användare eller roller för relevanta pg_catalog tabeller och vyer uppstår ett fel under migreringsprocessen. Du kan identifiera det här felet med hjälp av följande mönster:

    pg_restore error: could not execute query <GRANT/REVOKE> <PERMISSIONS> on <relevant TABLE/VIEW> to <user>.
    

Lösning

Lös ett pg_catalog fel genom att ta bort de behörigheter som du har beviljat användare och roller relaterade till relevanta pg_catalog tabeller och vyer.

Steg 1: Identifiera behörigheter

Kör följande fråga på din enda server genom att logga in som administratörsanvändare.

I koden:

  • Behörigheter kallas rättigheter.
  • Ett relation_name värde är ett tabellnamn eller visningsnamn.
SELECT
  array_to_string(array_agg(acl.privilege_type), ', ') AS privileges,
  t.relname AS relation_name,
  r.rolname AS grantee
FROM
  pg_catalog.pg_class AS t
  CROSS JOIN LATERAL aclexplode(t.relacl) AS acl
  JOIN pg_roles r ON r.oid = acl.grantee
WHERE
  acl.grantee <> 'azure_superuser'::regrole
  AND t.relname IN (
    'pg_authid', 'pg_largeobject', 'pg_subscription', 'pg_user_mapping', 'pg_statistic',
    'pg_config', 'pg_file_settings', 'pg_hba_file_rules', 'pg_replication_origin_status', 'pg_shadow', 'pg_pltemplate'
  )
GROUP BY
  r.rolname, t.relname;
Steg 2: Granska utdata

Utdata från frågan visar listan över behörigheter som beviljas till roller i relevanta tabeller och vyer.

Till exempel:

Behörigheter Tabell eller vy (relationsnamn) Bidragstagare
VÄLJ pg_authid adminuser1
VÄLJ, UPPDATERA pg_shadow adminuser2
Steg 3: Återkalla behörigheterna

Om du vill återkalla behörigheterna, kör REVOKE instruktionerna för varje behörighet i tabellen eller vyn från mottagaren.

Till exempel:

REVOKE SELECT ON pg_authid FROM adminuser1;
REVOKE SELECT ON pg_shadow FROM adminuser2;
REVOKE UPDATE ON pg_shadow FROM adminuser2;
Steg 4: Slutlig verifiering

Kör frågan från steg 1 igen för att säkerställa att den resulterande utdatauppsättningen är tom.

Anteckning

Om du vill undvika behörighetsrelaterade problem under migreringen kontrollerar du att du slutför föregående steg för alla databaser som ingår i migreringen.

När du har slutfört de här stegen kan du initiera en migrering från en enskild server till en flexibel server med hjälp av migreringstjänsten.