Ja, dit is te doen.
"superuser" kan een echte superuser
zijn , postgres
standaard hernoem ik de rol voor gewone gebruikers naar usr
, omdat user
is een gereserveerd woord - gebruik het niet als identificatie.
CREATE ROLE usr;
CREATE ROLE poweruser;
GRANT usr TO poweruser; -- poweruser can do everything usr can.
CREATE ROLE bob PASSWORD <password>;
GRANT poweruser TO bob;
CREATE ROLE alice PASSWORD <password>;
GRANT usr TO alice;
REVOKE ALL ON SCHEMA x FROM public;
GRANT USAGE ON SCHEMA x TO usr;
REVOKE ALL ON TABLE x FROM public;
REVOKE ALL ON TABLE y FROM public;
CREATE FUNCTION
...
SECURITY DEFINER;
REVOKE ALL ON FUNCTION ... FROM public;
GRANT EXECUTE ON FUNCTION a TO usr;
GRANT EXECUTE ON FUNCTION b TO poweruser;
Of u kunt daemon-rollen maken zonder in te loggen om de functies te bezitten en de respectieve rechten op de tafel te behouden. Dat zou nog veiliger zijn.
Als je deze route volgt, zul je van houden ALTER DEFAULT PRIVILEGES
(geïntroduceerd met PostgreSQL 9.0). Meer details in dit gerelateerde antwoord
.
Lees het hoofdstuk Schrijven SECURITY DEFINER
Functioneert veilig
in de handleiding.