sql >> Database >  >> RDS >> PostgreSQL

Is er een manier om updates/verwijderingen uit te schakelen, maar toch triggers toe te staan ​​om ze uit te voeren?

Ja, dit is mogelijk.

Triggers worden uitgevoerd met de privileges van de triggerfunctie, standaard ingesteld op SECURITY INVOKER wat betekent dat de triggerfunctie effectief wordt uitgevoerd met de privileges van de current_user , in jouw geval degene die rijen invoegt.

Als de huidige gebruiker niet de vereiste rechten heeft voor de tabellen waarop uw triggerfunctie werkt, zal uw oorspronkelijke bewerking in de onderliggende tabel een fout geven.

Echter , kunt u SECURITY DEFINER . gebruiken om de triggerfunctie deze functie te laten uitvoeren met de privileges van de OWNER van de functie.

Als je een supergebruiker hebt die eigen de trigger-functie, het kan alles - wat een mogelijk veiligheidsrisico zou zijn. Overweeg de instructies in de handleiding over het schrijven van SECURITY DEFINER Functioneert veilig.

Maar het is verstandiger om een ​​duidelijke rol te maken met alleen de nodige privileges OWNER van de triggerfunctie. U kunt zelfs gewoon een "daemon"-rol maken zonder in te loggen, als privilegebundel voor dergelijke bewerkingen. U zou dan alleen de benodigde privileges (op schema's, tabellen, reeksen ...) aan deze daemon-rol verlenen. Voor meer geavanceerde ontwerpen moet u privileges bundelen in "groepsrollen" (nogmaals, geen login) en deze groepsrollen toekennen aan rollen die het nodig hebben (naar de daemon-rol in dit voorbeeld), waardoor ze effectief "lid van de groep" worden. Ik doe dat veel.

Beschouw dit gerelateerde antwoord op dba.SE met betrekking tot de privileges op de functie zelf:

  • Wat zijn de privileges die nodig zijn om een ​​triggerfunctie uit te voeren in PostgreSQL 8.4?



  1. Cast int naar varchar

  2. Joomla SQL-injectie-kwetsbaarheid

  3. Hoe werkt bevat() in PL-SQL?

  4. Proactieve SQL Server Health Checks, Deel 1:Schijfruimte