PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Membuat pemicu untuk penyisipan tabel anak mengembalikan kesalahan yang membingungkan

Solusi Anda memperbaiki berlalunya NEW . yang diketik baris variabel. Namun, Anda memiliki lubang injeksi SQL yang licik dalam kode Anda, yang sangat berbahaya dalam SECURITY DEFINER fungsi. Masukan pengguna harus tidak pernah dikonversi ke kode SQL tanpa meloloskan.

Bersihkan seperti ini:

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;

Juga:

  • OLD tidak didefinisikan dalam INSERT pemicu.
  • Anda tidak memerlukan variabel. Tugas relatif mahal di 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. Menggunakan COALESCE untuk menangani nilai NULL di PostgreSQL

  2. PostgreSQL unnest() dengan nomor elemen

  3. Menggunakan Replikasi Logis PostgreSQL untuk Mempertahankan Server TEST Baca/Tulis yang Selalu Terkini

  4. Mengacu pada alias kolom agregat pilih dalam klausa memiliki di Postgres

  5. Impor Data Excel ke PostgreSQL 9.3