Ja, det er muligt.
Triggere køres med triggerfunktionens privilegier, som standard er SECURITY INVOKER
hvilket betyder, at triggerfunktionen udføres effektivt med rettighederne for current_user
, i dit tilfælde den, der indsætter rækker.
Hvis den aktuelle bruger ikke har de nødvendige rettigheder til de tabeller, som din triggerfunktion fungerer på, vil din oprindelige handling i den underliggende tabel fejle.
Men , kan du bruge SECURITY DEFINER
for triggerfunktionen at få denne funktion til at køre med privilegierne for OWNER
af funktionen.
Hvis du har en egen superbruger triggerfunktionen, kan den alt - hvilket ville være en mulig sikkerhedsrisiko. Overvej instruktionerne i manualen om at skrive SECURITY DEFINER
Fungerer sikkert.
Men det er klogere at lave en almindelig rolle med bare de nødvendige privilegier OWNER
af udløserfunktionen. Du kan endda bare oprette en "dæmon"-rolle uden login, der fungerer som privilegiebundt for sådanne operationer. Du vil så kun give de nødvendige privilegier (på skemaer, tabeller, sekvenser ...) til denne dæmonrolle. For mere sofistikerede designs bør du samle privilegier i "grupperoller" (igen, ingen login) og give disse grupperoller til roller, der har brug for det (til dæmonrollen i dette eksempel), hvilket effektivt gør dem til "medlemmer af gruppen". Det gør jeg meget.
Overvej dette relaterede svar på dba.SE vedrørende privilegierne på selve funktionen:
- Hvad er de nødvendige rettigheder for at udføre en triggerfunktion i PostgreSQL 8.4?