जहाँ तक विशेषाधिकारों का सवाल है, ट्रिगर कार्य अन्य कार्यों की तरह ही व्यवहार करते हैं। एक मामूली अपवाद के साथ:
टेबल पर ट्रिगर बनाने के लिए, उपयोगकर्ता को TRIGGER
टेबल पर विशेषाधिकार होना चाहिए । उपयोगकर्ता को EXECUTE
ट्रिगर फ़ंक्शन पर विशेषाधिकार भी होना चाहिए ।
अद्यतन
टिप्पणी में प्रतिक्रिया के बाद मैंने कुछ शोध किया। Postgres Wiki में एक खुला TODO आइटम है:
चुस्त ट्रिगर अनुमति की जाँच करें
से जुड़ा हुआ Postgres हैकर्स पर इस सूत्र । वर्तमान में, EXECUTE
ट्रिगर फ़ंक्शन पर विशेषाधिकार केवल ट्रिगर क्रिएट समय पर चेक किए जाते हैं , लेकिन रनटाइम पर नहीं। ट्रिगर फ़ंक्शन पर EXECUTE को रद्द करने से एक बार बनाए गए ट्रिगर पर कोई प्रभाव नहीं पड़ता है। आपका अवलोकन सही प्रतीत होता है।
यह वस्तुओं में हेरफेर करने के लिए कोई अतिरिक्त विशेषाधिकार प्रदान नहीं करता है। यदि फ़ंक्शन भूमिका में फ़ंक्शन बॉडी को निष्पादित करने के लिए आवश्यक विशेषाधिकारों का अभाव है, तो सामान्य अपवाद उठाया जाता है। रास्ता प्रशस्त करने के लिए, आप OWNER
फ़ंक्शन का एक विशेषाधिकार प्राप्त उपयोगकर्ता बना सकते हैं और उपयोग कर सकते हैं
SECURITY DEFINER
क्लॉज, जैसा कि यहां मैनुअल में प्रलेखित है । यह फ़ंक्शन को मालिक की अनुमतियों के साथ इनवॉकर (डिफ़ॉल्ट) के बजाय चलाने का कारण बनता है ।
यदि मालिक एक सुपरयुसर है, तो आपको अतिरिक्त सावधानी बरतने की आवश्यकता है जो आप EXECUTE
विशेषाधिकार प्रदान करते हैं और दुरुपयोग से बचने के लिए क्या कार्य कर सकते हैं। आप चाहे तो
REVOKE ALL ON FUNCTION foo() FROM public;
के साथ शुरू करने और SET search_path
समारोह के लिए उपयोग करने के लिए। सुरक्षित रूप से लेखन कार्य
पर अध्याय को पढ़ना सुनिश्चित करें ।SECURITY DEFINER
एसओ पर इस संबंधित उत्तर में एक कोड उदाहरण ढूंढें ।
SECURITY DEFINER
, मुझे एक चाहिएSECURITY INVOKER
। लेकिन ऐसा लगता है (ट्रिगर फ़ंक्शन के लिए, नियमित फ़ंक्शन के लिए नहीं) कि डिफ़ॉल्ट विकल्प (SECURITY INVOKER
) का उपयोग करके , यह ऐसा काम नहीं करता है।