Ja, detta är möjligt.
Triggers körs med privilegierna för triggerfunktionen, som standard är SECURITY INVOKER
vilket innebär att triggerfunktionen exekveras effektivt med privilegierna för current_user
, i ditt fall den som infogar rader.
Om den aktuella användaren inte har de nödvändiga rättigheterna för de tabeller som din triggerfunktion fungerar på, kommer din ursprungliga operation i den underliggande tabellen att felas.
Men , kan du använda SECURITY DEFINER
för att triggerfunktionen ska köra denna funktion med privilegierna för OWNER
av funktionen.
Om du har en egen superanvändare triggerfunktionen kan den göra allt - vilket skulle vara en möjlig säkerhetsrisk. Tänk på instruktionerna i manualen om hur du skriver SECURITY DEFINER
Fungerar säkert.
Men det är klokare att skapa en vanlig roll med bara de nödvändiga privilegierna OWNER
av triggerfunktionen. Du kan till och med bara skapa en "demon"-roll utan inloggning, som fungerar som privilegiepaket för sådana operationer. Du skulle då bara ge de nödvändiga privilegierna (på scheman, tabeller, sekvenser ...) till denna demonroll. För mer sofistikerade design bör du bunta privilegier i "grupproller" (igen, ingen inloggning) och ge dessa grupproller till roller som behöver det (till demonrollen i det här exemplet), vilket i praktiken gör dem till "medlemmar i gruppen". Jag gör det mycket.
Tänk på det här relaterade svaret på dba.SE angående privilegierna på själva funktionen:
- Vilka privilegier krävs för att köra en triggerfunktion i PostgreSQL 8.4?