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

postgresql 9.1 - accedere alle tabelle tramite funzioni

Sì, è fattibile.

"superutente" potrebbe essere un vero e proprio superuser , postgres per impostazione predefinita. Rinomino il ruolo per gli utenti semplici in usr , perché user è una parola riservata - non usarla come identificatore.

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;

Oppure potresti creare ruoli daemon senza login per possedere le funzioni e mantenere i rispettivi diritti sul tavolo. Sarebbe ancora più sicuro.

Se stai percorrendo questa strada, amerai ALTER DEFAULT PRIVILEGES (introdotto con PostgreSQL 9.0). Maggiori dettagli in questa risposta correlata .

Leggi il capitolo Scrivere SECURITY DEFINER Funziona in sicurezza nel manuale.