PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tạo trình kích hoạt để chèn bảng con trả về lỗi khó hiểu

Giải pháp của bạn khắc phục việc chuyển NEW được nhập theo hàng Biến đổi. Tuy nhiên, bạn có một lỗ hổng chèn SQL lén lút trong mã của mình, điều đó đặc biệt nguy hiểm trong SECURITY DEFINER hàm số. Đầu vào của người dùng phải không bao giờ được chuyển đổi thành mã SQL không thoát.

Vệ sinh như thế này:

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;

Ngoài ra:

  • OLD không được định nghĩa trong INSERT kích hoạt.
  • Bạn không cần một biến. Bài tập tương đối đắt trong 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. Làm cách nào để chèn đúng nhiều hàng vào PG với node-postgres?

  2. Tạo các giá trị DEFAULT trong CTE UPSERT bằng PostgreSQL 9.3

  3. Làm thế nào để cài đặt im lặng Postgresql trong Ubuntu qua. Dockerfile?

  4. PostgreSQL cách xem truy vấn nào đã chạy

  5. Có thể cung cấp các tham số cho tên bảng hoặc cột trong Câu lệnh chuẩn bị hoặc QueryRunner.update () không?