PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

चाइल्ड टेबल इंसर्शन के लिए ट्रिगर बनाना भ्रमित करने वाली त्रुटि देता है

आपका समाधान पंक्ति-टाइप की गई NEW के पारित होने को ठीक करता है चर। हालांकि, आपके कोड में एक गुप्त SQL-इंजेक्शन छेद है, जो विशेष रूप से खतरनाक है एक SECURITY DEFINER . में समारोह। उपयोगकर्ता इनपुट कभी नहीं . होना चाहिए एसक्यूएल कोड में परिवर्तित नहीं किया जा सकता है।

ऐसे करें सेनिटाइज:

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. पोस्टग्रेज में एनम टाइप वैल्यू कैसे डिलीट करें?

  2. SQL:जब NOT IN और NOT EQUAL TO की बात आती है, तो कौन सा अधिक कुशल है और क्यों?

  3. पोस्टग्रेज - लापता डेटा के लिए 0 गिनती के साथ पंक्तियों को कैसे वापस करें?

  4. मैं एक कॉलम कैसे जोड़ सकता हूं जो पोस्टग्रेस्क्ल डेटाबेस में नल की अनुमति नहीं देता है?

  5. बड़ी टेबल पर OFFSET के साथ क्वेरी को ऑप्टिमाइज़ करें