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

Oprettelse af en trigger for underordnet tabelindsættelse returnerer en forvirrende fejl

Din løsning retter videregivelsen af ​​den række-typede NEW variabel. Men du har et lusket SQL-injektion hul i din kode, det er særligt farligt i en SECURITY DEFINER fungere. Brugerinput må aldrig konverteres til SQL-kode unescaped.

Rengør sådan:

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;

Også:

  • OLD er ikke defineret i en INSERT trigger.
  • Du behøver ikke en variabel. Opgaver er forholdsvis dyre i plpgsql.


  1. Oracle (ORA-02270):ingen matchende unikke eller primær nøgle for denne kolonnelistefejl

  2. Hvorfor giver mysqli en Kommandoer ude af synkroniseringsfejl?

  3. Applikationen går ned ved installation med fejl sqlite3_exec - Kunne ikke indstille synkron tilstand =1(Normal)

  4. WhoIsActive Runner