PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Създаването на тригер за вмъкване на дъщерна таблица връща объркваща грешка

Вашето решение коригира предаването на въведения от ред NEW променлива. Въпреки това, имате подъл дупка за инжектиране на SQL в кода си, това е особено опасно в SECURITY DEFINER функция. Въвеждането на потребителя трябва никога да се преобразува в SQL код без екраниране.

Дезинфекцирайте по следния начин:

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;

Също така:

  • OLD не е дефиниран в INSERT задействане.
  • Не се нуждаете от променлива. Заданията са сравнително скъпи в plpgsql.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NOT IN в postgresql не работи

  2. psql:не можа да се свърже със сървъра:Връзката е отказана Грешка при свързване към отдалечена база данни

  3. как да изчислим салда в счетоводен софтуер с помощта на функцията прозорец postgres

  4. Получаване на списък с дати в диапазон в PostgreSQL

  5. Как мога да импортирам .sql файл в моята Heroku postgres база данни?