sql >> Databáze >  >> RDS >> PostgreSQL

Co znamená kód následující CREATE FUNCTION jako řetězec?

PostgreSQL je vysoce rozšiřitelný a můžete si například definovat svůj vlastní procedurální jazyk pro zápis funkcí.

PostgreSQL neví o tomto jazyce nic kromě toho, že musí zavolat určitý jazykový handler k provedení funkce.

Způsob, který byl zvolen k implementaci, je zjednodušení předávání kódu jako řetězce.

Toto je pouze detail implementace a nečiní funkce PostgreSQL více či méně zranitelnými vůči SQL injection než jiné RDBMS.

Existuje několik úrovní, na kterých se musíte před injekcí bránit:

  • Argumenty funkce:Zde byste měli zvolit neřetězcové datové typy, kdykoli je to možné.

  • Příkazy SQL ve funkci:Zde byste se měli vyhnout dynamickému SQL, kdykoli je to možné, a pokud musíte použít dynamické SQL, měli byste vložit proměnné pomocí %L vzor format funkce.

Opět je to stejné, pokud jsou těla funkcí zadána jako řetězce nebo ne.



  1. Použití agregačních funkcí (SUM, AVG, MAX, MIN, COUNT, DISTINCT) v MySQL

  2. Automaticky otevírat výsledky dotazů SQLite v Excelu

  3. Přesunout hodnoty bez NULL nahoru v rámci oddílu

  4. Sloučit 2 tabulky pro dotaz SELECT?