हाँ, यह संभव है।
ट्रिगर्स को ट्रिगर फ़ंक्शन के विशेषाधिकारों के साथ चलाया जाता है, जो डिफ़ॉल्ट रूप से SECURITY INVOKER
पर निर्भर करता है। जिसका अर्थ है, ट्रिगर फ़ंक्शन को current_user
. के विशेषाधिकारों के साथ प्रभावी ढंग से निष्पादित किया जाता है , आपके मामले में पंक्तियों को सम्मिलित करने वाला।
यदि वर्तमान उपयोगकर्ता के पास उन तालिकाओं के लिए आवश्यक विशेषाधिकार नहीं हैं जिन पर आपका ट्रिगर फ़ंक्शन संचालित होता है, तो अंतर्निहित तालिका में आपका मूल संचालन त्रुटिपूर्ण हो जाएगा।
हालांकि , आप SECURITY DEFINER
. का उपयोग कर सकते हैं इस फ़ंक्शन को OWNER
. के विशेषाधिकारों के साथ चलाने के लिए ट्रिगर फ़ंक्शन के लिए समारोह का।
यदि आपके पास एक सुपर उपयोक्ता स्वयं है ट्रिगर फ़ंक्शन, यह सब कुछ कर सकता है - जो एक संभावित सुरक्षा खतरा होगा। SECURITY DEFINER
Writing लिखने के बारे में मैनुअल में दिए गए निर्देशों पर विचार करें सुरक्षित रूप से कार्य करता है।
लेकिन केवल आवश्यक विशेषाधिकारों के साथ एक सामान्य भूमिका निभाना समझदारी है OWNER
ट्रिगर फ़ंक्शन का। आप लॉगिन के बिना भी "डेमन" भूमिका बना सकते हैं, इस तरह के संचालन के लिए विशेषाधिकार बंडल के रूप में कार्य कर सकते हैं। फिर आप इस डेमॉन भूमिका के लिए केवल आवश्यक विशेषाधिकार (स्कीमा, टेबल, अनुक्रम ...) प्रदान करेंगे। अधिक परिष्कृत डिजाइनों के लिए आपको विशेषाधिकारों को "समूह भूमिकाओं" (फिर से, कोई लॉगिन नहीं) में बंडल करना चाहिए और इन समूह भूमिकाओं को उन भूमिकाओं के लिए प्रदान करना चाहिए जिन्हें इसकी आवश्यकता है (इस उदाहरण में डेमन भूमिका के लिए), प्रभावी रूप से उन्हें "समूह का सदस्य" बनाना। मैं यह बहुत करता हूं।
फ़ंक्शन पर विशेषाधिकारों के संबंध में dba.SE पर इस संबंधित उत्तर पर विचार करें:
- PostgreSQL 8.4 में ट्रिगर फ़ंक्शन को निष्पादित करने के लिए आवश्यक विशेषाधिकार क्या हैं?