sql >> Databasteknik >  >> RDS >> PostgreSQL

postgresql 9.1 - åtkomst till tabeller genom funktioner

Ja, det här är genomförbart.

"superanvändare" kan vara en verklig superuser , postgres som standard. Jag byter namn på rollen för vanliga användare till usr , eftersom user är ett reserverat ord - använd det inte som identifierare.

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 så kan du skapa demonroller utan inloggning för att äga funktionerna och ha respektive rättigheter på bordet. Det skulle vara ännu säkrare.

Om du går den här vägen kommer du att älska ALTER DEFAULT PRIVILEGES (introducerad med PostgreSQL 9.0). Mer information i det här relaterade svaret .

Läs kapitlet Att skriva SECURITY DEFINER Fungerar säkert i manualen.




  1. Kör rå SQL vid migrering

  2. Hur man importerar en enskild tabell till mysql-databasen med hjälp av kommandoraden

  3. Vilolägesproblem med Auto Increment ID MYSQL 5

  4. Hanterar Null i den bästa funktionen i Oracle