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

Vytvoření spouštěče pro vložení podřízené tabulky vrátí matoucí chybu

Vaše řešení opravuje předávání řádku NEW proměnná. Máte však ve svém kódu záludnou díru pro vkládání SQL, což je obzvláště nebezpečné v SECURITY DEFINER funkce. Vstup uživatele nesmí být nikdy být převeden na kód SQL bez kódování.

Dezinfikujte takto:

CREATE OR REPLACE FUNCTION trg_test_log()
  RETURNS trigger AS
$$
BEGIN
    EXECUTE 'INSERT INTO public.' || quote_ident('testlog_' || NEW.name)
         || ' SELECT ($1).*'
    USING NEW;

    RETURN NULL;
END
$$
LANGUAGE plpgsql SECURITY DEFINER;

Také:

  • OLD není definován v INSERT spoušť.
  • Nepotřebujete proměnnou. Úkoly jsou v plpgsql poměrně drahé.


  1. Připojte se k serveru MySQL přes SSH v PHP

  2. MySQL – Počkejte několik sekund pomocí SELECT SLEEP()

  3. Prozkoumání modulových API v Javě 9

  4. ORA-20001 v R12 Shromáždit statistiky schématu na 11g (FND_HISTOGRAM_COLS)