PostgreSQL 8.4 में ट्रिगर फ़ंक्शन को निष्पादित करने के लिए आवश्यक विशेषाधिकार क्या हैं?


11

PostgreSQL 8.4 में ट्रिगर फ़ंक्शन को निष्पादित करने के लिए आवश्यक विशेषाधिकार क्या हैं?

ऐसा लगता है कि भूमिका के लिए निर्धारित विशेषाधिकार ट्रिगर फ़ंक्शन को निष्पादित करने के लिए कोई फर्क नहीं पड़ता। मुझे लगता है कि मैंने किसी दिन देखा है कि ट्रिगर फ़ंक्शन को निष्पादित करने के लिए आवश्यक विशेषाधिकार EXECUTE विशेषाधिकार है, लेकिन तालिका के मालिक के लिए, वास्तविक भूमिका नहीं है जो उस क्रिया को करती है जो ट्रिगर फ़ंक्शन को कॉल करने वाले ट्रिगर को आग देती है।

मुझे वह दस्तावेज़ भाग नहीं मिल रहा है जो उस बिंदु की व्याख्या करता हो, कोई मदद?

जवाबों:


10

जहाँ तक विशेषाधिकारों का सवाल है, ट्रिगर कार्य अन्य कार्यों की तरह ही व्यवहार करते हैं। एक मामूली अपवाद के साथ:

टेबल पर ट्रिगर बनाने के लिए, उपयोगकर्ता को 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) का उपयोग करके , यह ऐसा काम नहीं करता है।

1
@EtienneRouxel: ट्रिगर फ़ंक्शंस अन्य फ़ंक्शंस की तरह फ़ंक्शंस हैं जहां तक ​​विशेषाधिकारों का संबंध है। आपको क्या लगता है अन्यथा?
इरविन ब्रान्डस्टेट्टर

@EtienneRouxel: मैंने एक मामूली अपवाद को दस्तावेज़ करने के लिए मैन्युअल रूप से एक उद्धरण जोड़ा।
एरविन ब्रान्डस्टेट्टर

1
परीक्षण: मैंने एक सरल ट्रिगर फ़ंक्शन बनाया है जो एक उठाता है NOTICE। मैंने फ़ंक्शन के स्वामी ALLसे PUBLICऔर विशेषाधिकारों को हटा दिया । फिर, अगर मैं मालिक या किसी अन्य भूमिका का उपयोग करता हूं, जिसे उस फ़ंक्शन पर कोई विशेषाधिकार नहीं है, तो मुझे विशेषाधिकारों की कमी के कारण त्रुटि की उम्मीद करनी चाहिए, लेकिन सब कुछ सफलतापूर्वक चलता है।

2
@ एटीनरौक्सल: दिलचस्प। मैंने भी परीक्षण किया। यदि आप ट्रिगर फ़ंक्शन के लिए विशेषाधिकार निष्पादित नहीं करते हैं तो आप ट्रिगर नहीं बना सकते। लेकिन आप अभी भी ट्रिगर को बनाने के बाद विशेषाधिकार को निष्पादित कर सकते हैं और ट्रिगर काम करना बंद नहीं करेगा। मैंने कुछ शोध किया। प्रश्न के लिंक जोड़ना ...
एरविन ब्रैंडस्टेटेटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.