sql >> Database >  >> RDS >> PostgreSQL

postgresql 9.1 - toegang tot tabellen via functies

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.




  1. FindByUUID() met behulp van Spring Data's JPA Repository

  2. Welke is sneller:gecorreleerde subquery's of join?

  3. MySQL cartesiaans product tussen twee SELECT-instructies

  4. PHP - Gegevens formatteren voor in_array