sql >> Database >  >> RDS >> PostgreSQL

Wat betekent de code die volgt op CREATE FUNCTION als tekenreeks?

PostgreSQL is zeer uitbreidbaar en u kunt bijvoorbeeld uw eigen proceduretaal definiëren om functies in te schrijven.

PostgreSQL weet niets over de taal, behalve dat het een bepaalde taalhandler moet aanroepen om de functie uit te voeren.

De manier waarop is gekozen om dit te implementeren is om de code te vereenvoudigen als een string.

Dit is slechts een implementatiedetail en maakt PostgreSQL-functies niet meer of minder kwetsbaar voor SQL-injectie dan andere RDBMS.

Er zijn verschillende niveaus waarop u zich tegen injectie moet verdedigen:

  • De functieargumenten:hier moet u waar mogelijk niet-string datatypes kiezen.

  • De SQL-instructies binnen de functie:Hier moet u waar mogelijk dynamische SQL vermijden, en als u dynamische SQL moet gebruiken, moet u variabelen invoegen met behulp van de %L patroon van het format functie.

Nogmaals, dit is hetzelfde als functie-elementen zijn gespecificeerd als strings of niet.



  1. Oracle-groepsdeel van rij en krijg rij met laatste tijdstempel

  2. Meerdere tafels selecteren vs. JOIN (prestaties)

  3. SQL SELECT WHERE rij bevat woord

  4. MySQL Stored Procedures werken niet met SELECT (basisvraag)