सुपर-उपयोगकर्ता के बिना एक्सटेंशन को सक्षम करने के लिए Postgresql


14

मेरे पास एक PostgreSQL 9.5 सर्वर है जिस पर मेरे पास स्क्रिप्ट हैं जो स्वचालित रूप से उपयोगकर्ताओं के लिए भूमिकाएं और डेटाबेस बनाती हैं। इन डेटाबेस के भीतर यह विशिष्ट एक्सटेंशन (जैसे pgcrypto) को सक्षम करने में सहायक होगा, लेकिन जैसा कि मैं समझता हूं कि इसे चलाने के लिए एक सुपरयुसर होना चाहिए CREATE EXTENSION। क्या सुपरयूज़र खाते के साथ मैन्युअल रूप से लॉग इन किए बिना ऐसे एक्सटेंशन को सक्षम करने का एक तरीका है?


4
क्या आपने उन्हें जोड़ने template1और फिर से प्रत्येक उपयोगकर्ता डेटाबेस बनाने की कोशिश template1की है CREATE DATABASE foo OWNER=userfoo TEMPLATE=template1?
कसंड्री

1
@ कासंद्री ने ऐसा नहीं सोचा था, लेकिन यह एक अच्छा विचार है। आदर्श रूप से मैं चाहूंगा कि यदि वे चाहें तो मालिकों को एक्सटेंशन जोड़ने में सक्षम होना चाहिए, लेकिन यह अभी भी एक स्वीकार्य संभावना है।
beldaz

जवाबों:


11

एक्सटेंशन पर डॉक्स से ,

सुपरयुसर (बूलियन) यदि यह पैरामीटर सही है (जो कि डिफ़ॉल्ट है), केवल सुपरयूजर ही एक्सटेंशन बना सकते हैं या इसे नए संस्करण में अपडेट कर सकते हैं । यदि इसे गलत पर सेट किया जाता है, तो इंस्टॉलेशन या अपडेट स्क्रिप्ट में कमांड निष्पादित करने के लिए आवश्यक विशेषाधिकारों की आवश्यकता होती है।

मान सेट नहीं किया गया है pgcrypto.control, इसलिए यह डिफ़ॉल्ट रूप से सत्य है जिसके लिए SuperUser की आवश्यकता है।

इसका मतलब है आप नहीं कर सकते हैं CREATE EXTENSIONडेटाबेस का मात्र स्वामी के रूप में, क्या पर डॉक्स के बावजूद एक्सटेंशन बनाने के विश्वास करने के लिए आप का नेतृत्व।

मैं इसे करने के लिए कड़ी मेहनत की कोशिश की false, और कोई खुशी नहीं है। सी एक अविश्वसनीय भाषा है और आपको मिलेगा

त्रुटि: अनुमति भाषा सी के लिए इनकार कर दिया

से pg_language पर डॉक्स

केवल सुपरसर्स ही अविश्वसनीय भाषाओं में कार्य कर सकते हैं।

... बेशक आप सुपरयुजर के रूप में cभरोसेमंद बन सकते हैं UPDATE pg_language set lanpltrusted = true where lanname = 'c';। फिर CREATE EXTENSION pgcryptoगैर-सुपरसुसर के रूप में ठीक काम करेगा। लेकिन, यह एक बुरे विचार की तरह लगता है अगर आपको अपने उपयोगकर्ताओं को अपने विस्तार निर्देशिका में स्रोत अपलोड करने और फिर इसे डेटाबेस में स्थापित करने के बारे में चिंता करनी है। यह कहना है, मैं दूर नहीं जाना होगा। मुझे इस बिल्ली की त्वचा का एक और रास्ता मिल जाएगा।


धन्यवाद इवान, यह पूरी तरह से एक उत्तर के रूप में मैं के लिए पूछ सकता है। मैं शायद इसके आस-पास पाने के लिए @ Kassandry के कैट-स्किनिंग प्रस्ताव का विकल्प चुनूंगा। मैंने एक संग्रहीत कार्यविधि में सृजन विस्तार को लपेटने के बारे में भी सोचा था, लेकिन इस कार्य को बनाने के लिए एक ही डेटाबेस में बिना dblink प्रमाणीकरण व्यर्थता के एक मार्ग नहीं मिला।
बेलाज

pg_dumpएक्सटेंशन के संबंध में डंपिंग स्टेटमेंट से इसे रोकने के लिए कोई विकल्प नहीं होने से क्या बात है ? वर्तमान में मुझे SQL द्वारा डंप किए गए उन स्टेटमेंट को हटाने के लिए बाहरी टेक्स्ट प्रोसेसिंग टूल का उपयोग करना होगा pg_dump
क्लॉडिक्स

@ इवान कैरोल: सुपरक्लियर को psql cli के माध्यम से झूठे में सेट करना संभव है? मेरे पास amazon aws rds पर एक उदाहरण है और pgcrypto.control की पहुँच नहीं है।
रिबामार

2
@ribamar नहीं क्योंकि इसका मतलब होगा कि डेटाबेस से जुड़ा कोई भी व्यक्ति db पोस्टमास्टर के रूप में शाब्दिक मनमाना कोड निष्पादन कर सकता है। यह एक भयानक विचार होगा।
इवान कैरोल

कोई नहीं, सुपरसुसर। मैं समझता हूं कि इस तरह से आप ऑपरेटिंग सिस्टम सुपर को dbms सुपर यूजर से अलग करते हैं, हालांकि अगर मैं ऐसा निर्णय ले रहा था तो मैं टूल को लागू करने के लिए जाऊंगा, और अगर वास्तव में एक और अधिक शक्तिशाली उपयोगकर्ता बनाने की आवश्यकता है, तो मैं इसे लागू करूंगा। उपकरण के अंदर।
रिबमार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.