sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL:Giv alle tilladelser til en bruger på en PostgreSQL-database

Alle kommandoer skal udføres, mens de er forbundet til den rigtige databaseklynge. Sørg for det.

Roller er objekter i databasens klynge . Alle databaser i den samme klynge deler sættet af definerede roller. Privilegier tildeles / tilbagekaldes pr. database / skema / tabel osv.

En rolle skal have adgang til databasen , naturligvis. Det er givet til PUBLIC som standard. Ellers:

GRANT CONNECT ON DATABASE my_db TO my_user;

Grundlæggende privilegier for Postgres 14 eller nyere

Postgres 14 tilføjer de foruddefinerede, ikke-login-roller pg_read_all_data / pg_write_all_data .
De har SELECT / INSERT , UPDATE , DELETE privilegier for alle tabeller, visninger og sekvenser. Plus USAGE på skemaer. Vi kan GRANT medlemskab i disse roller:

GRANT pg_read_all_data TO my_user;
GRANT pg_write_all_data TO my_user;

Dette dækker alle grundlæggende DML-kommandoer (men ikke DDL, og ikke nogle specielle kommandoer såsom TRUNCATE eller EXECUTE privilegium til funktioner!). Manualen:

pg_read_all_data

Læs alle data (tabeller, visninger, sekvenser), som om du havde SELECT ret til disse objekter og USAGE rettigheder på alle skemaer, selv uden at have det eksplicit. Denne rolle har ikke rolleattributtenBYPASSRLS sæt. Hvis RLS bliver brugt, kan en administrator ønsker at indstille BYPASSRLS på roller, hvor denne rolle er GRANT red til.

pg_write_all_data

Skriv alle data (tabeller, visninger, sekvenser), som om du havde INSERT ,UPDATE og DELETE rettigheder til disse objekter og USAGE rettigheder på alle skemaer, selv uden at have det eksplicit. Denne rolle har ikke rolleattributten BYPASSRLS sæt. Hvis RLS bruges, vil en administrator muligvis indstille BYPASSRLS på roller, hvor denne rolle erGRANT red til.

Alle privilegier uden brug af foruddefinerede roller (enhver Postgres-version)

Kommandoer skal udføres, mens du er forbundet til den rigtige database. Sørg for det.

Rollen kræver (mindst) USAGE privilegium på skemaet . Igen, hvis det er givet til PUBLIC , du er dækket. Ellers:

GRANT USAGE ON SCHEMA public TO my_user;

Eller giv USAGEalle tilpassede skemaer:

DO
$$
BEGIN
   -- RAISE NOTICE '%', (  -- use instead of EXECUTE to see generated commands
   EXECUTE (
   SELECT string_agg(format('GRANT USAGE ON SCHEMA %I TO my_user', nspname), '; ')
   FROM   pg_namespace
   WHERE  nspname <> 'information_schema' -- exclude information schema and ...
   AND    nspname NOT LIKE 'pg\_%'        -- ... system schemas
   );
END
$$;

Derefter alle tilladelser til alle tabeller (kræver Postgres 9.0 eller senere).
Og glem ikke sekvenser (hvis nogen):

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO my_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO my_user;

Alternativt kan du bruge "Grant Wizard" i pgAdmin 4 til at arbejde med en GUI.

Der er nogle andre objekter, manualen til GRANT har den komplette liste. Fra Postgres 12:

privilegier på et databaseobjekt (tabel, kolonne, visning, fremmed tabel, sekvens, database, fremmed-data wrapper, fremmed server, funktion, procedure, proceduresprog, skema eller tablespace)

Men resten er sjældent nødvendigt. Flere detaljer:

  • Hvordan administrerer man STANDARDPRIVILEGIER for BRUGERE på en DATABASE vs. SCHEMA?
  • Tildel privilegier til en bestemt database i PostgreSQL
  • Sådan giver du alle privilegier på visninger til vilkårlige brugere

Overvej at opgradere til en aktuel version.



  1. SQL Server 2008 - rækkefølge efter strenge med nummer numerisk

  2. Kører Total-Order By Date i SQLite

  3. Hvordan SQLite Ifnull() virker

  4. Postgresql opretter ikke db med "createdb" som superbruger, men udsender ikke fejl