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

Er der en måde at deaktivere opdateringer/sletninger på, men stadig tillade triggere at udføre dem?

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?



  1. FIND_IN_SET() vs IN()

  2. Installer SQL Server Agent-udvidelsen på Azure Data Studio

  3. Hvordan Modulo-operatøren fungerer i MariaDB

  4. Sådan gemmer du en dato og klokkeslæt i MySQL med tidszoneoplysninger