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

postgresql 9.1 - få adgang til tabeller gennem funktioner

Ja, det kan lade sig gøre.

"superbruger" kunne være en faktisk superuser , postgres som standard. Jeg omdøber rollen for almindelige brugere til usr , fordi user er et reserveret ord - brug det ikke som identifikator.

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;

Eller du kan oprette dæmonroller uden login for at eje funktionerne og have de respektive rettigheder på bordet. Det ville være endnu mere sikkert.

Hvis du går denne rute, vil du elske ALTER DEFAULT PRIVILEGES (introduceret med PostgreSQL 9.0). Flere detaljer i dette relaterede svar .

Læs kapitlet Skrivning af SECURITY DEFINER Fungerer sikkert i manualen.




  1. Fjern dublet fra en tabel

  2. Kortlæg en lillebitte som boolesk dvale

  3. Hvorfor returnerer mysql_query() TRUE med en SELECT-sætning?

  4. Oprettelse af relationslinks i PostgreSQL via pgAdmin