Alle opdrachten moeten worden uitgevoerd terwijl ze zijn verbonden met het juiste databasecluster. Zorg ervoor.
Rollen zijn objecten van de database cluster . Alle databases van hetzelfde cluster delen de set gedefinieerde rollen. Privileges worden toegekend / ingetrokken per database / schema / tabel enz.
Een rol heeft toegang nodig tot de database , blijkbaar. Dat wordt verleend aan PUBLIC
standaard. Anders:
GRANT CONNECT ON DATABASE my_db TO my_user;
Basisrechten voor Postgres 14 of hoger
Postgres 14 voegt de vooraf gedefinieerde, niet-aanmeldingsrollen toe pg_read_all_data
/ pg_write_all_data
.
Ze hebben SELECT
/ INSERT
, UPDATE
, DELETE
privileges voor allen tabellen, weergaven en reeksen. Plus USAGE
op schema's. We kunnen GRANT
lidmaatschap in deze rollen:
GRANT pg_read_all_data TO my_user;
GRANT pg_write_all_data TO my_user;
Dit omvat alle basis DML-commando's (maar niet DDL, en niet enkele speciale commando's zoals TRUNCATE
of de EXECUTE
privilege voor functies!). De handleiding:
pg_read_all_data
Lees alle gegevens (tabellen, weergaven, reeksen), alsof u SELECT
. hebt rechten op die objecten, en USAGE
rechten op alle schema's, zelfs zonder dit expliciet te hebben. Deze rol heeft niet het rolkenmerkBYPASSRLS
set. Als RLS wordt gebruikt, kan een beheerder BYPASSRLS
. willen instellen op rollen waarvan deze rol GRANT
. is ed naar.
pg_write_all_data
Schrijf alle gegevens (tabellen, weergaven, reeksen), alsof u INSERT
. hebt ,UPDATE
, en DELETE
rechten op die objecten, en USAGE
rechten op alle schema's, zelfs zonder dit expliciet te hebben. Deze rol heeft niet het rolkenmerk BYPASSRLS
set. Als RLS wordt gebruikt, kan een beheerder BYPASSRLS
willen instellen op rollen die deze rol isGRANT
ed naar.
Alle privileges zonder vooraf gedefinieerde rollen te gebruiken (elke Postgres-versie)
Opdrachten moeten worden uitgevoerd terwijl ze met de juiste database zijn verbonden. Zorg ervoor.
De rol heeft (minimaal) de USAGE
. nodig privilege op het schema . Nogmaals, als dat wordt toegekend aan PUBLIC
, je bent gedekt. Anders:
GRANT USAGE ON SCHEMA public TO my_user;
Of geef USAGE
op alle aangepaste schema's:
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
$$;
Dan alle rechten voor alle tabellen (vereist Postgres 9.0 of later).
En vergeet reeksen . niet (indien aanwezig):
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO my_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO my_user;
Als alternatief kunt u de "Grant Wizard" van pgAdmin 4 gebruiken om met een GUI te werken.
Er zijn nog enkele andere objecten, de handleiding voor GRANT
heeft de volledige lijst. Vanaf Postgres 12:
privileges op een database-object (tabel, kolom, weergave, vreemde tabel, reeks, database, vreemde-gegevenswrapper, vreemde server, functie, procedure, proceduretaal, schema of tabelruimte)
Maar de rest is zelden nodig. Meer details:
- Hoe STANDAARDPRIVILEGES voor GEBRUIKERS beheren op een DATABASE versus SCHEMA?
- Bevoegdheden verlenen voor een bepaalde database in PostgreSQL
- Hoe alle rechten op weergaven toe te kennen aan een willekeurige gebruiker
Overweeg om te upgraden naar een huidige versie.