2012-05-08 20 views
18

पर विचारों पर सभी विशेषाधिकार कैसे प्रदान करें आप मनमाने ढंग से उपयोगकर्ता के सभी कार्यों और विचारों पर पढ़ने/चयन का उपयोग कैसे करते हैं?मनमानी उपयोगकर्ता

मैं psql --user=postgres -d mydb -f myview.sql का उपयोग कई कार्य और दृश्य बनाने के लिए, और फिर मैं चलाएँ:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser; 

सभी विशेषाधिकार प्रदान किया गया, मैं myuser उम्मीद होती है अब कार्य करता है और विचारों postgres उपयोगकर्ता द्वारा बनाई गई करने के लिए उपयोग किया है । हालांकि, जब मैं उन्हें myuser के साथ आज़माकर एक्सेस करता हूं, तो मुझे "संबंध के लिए अनुमति अस्वीकार ..." त्रुटि मिलती है। ऐसा क्यों है?

उत्तर

25

कारण यह है कि आपको दृश्य या तालिका तक पहुंचने के लिए अतिरिक्त विशेषाधिकारों की आवश्यकता है। डेटाबेस पर विशेषाधिकार इसमें सभी वस्तुओं तक पहुंच को कवर नहीं करते हैं।

यह कार्यों के साथ अलग है: EXECUTE विशेषाधिकार डिफ़ॉल्ट रूप से public पर दिया गया है। लेकिन फ़ंक्शन वर्तमान उपयोगकर्ता के विशेषाधिकारों के साथ निष्पादित किया जाता है। CREATE FUNCTION के लिए आपको SECURITY DEFINER संशोधक में रुचि हो सकती है। लेकिन आम तौर पर इसमें शामिल टेबल पर SELECT देने के लिए पर्याप्त है।

Per documentation about default privileges:

वस्तु के प्रकार के आधार पर प्रारंभिक डिफ़ॉल्ट विशेषाधिकार PUBLIC करने के लिए कुछ विशेषाधिकार देने में शामिल हो सकता है। डिफॉल्ट कोई सार्वजनिक टेबल, कॉलम, स्कीमा और टेबलस्पेस के लिए एक्सेस नहीं है; CONNECT विशेषाधिकार और TEMP डेटाबेस निर्माण के लिए तालिका निर्माण विशेषाधिकार; EXECUTE कार्यों के लिए विशेषाधिकार; और USAGE भाषाओं के लिए विशेषाधिकार।

आप इस DDL आदेश में रुचि हो सकती (Postgres की आवश्यकता है 9.0 या बाद में): एक ओर जहां सवाल में डेटाबेस से जुड़ा, निश्चित रूप से (@marcel's comment नीचे देखें)

GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser; 

, और एक के रूप में पर्याप्त विशेषाधिकार वाले उपयोगकर्ता। तुम भी स्थापित करने DEFAULT PRIVILEGES में रुचि हो सकती:

अधिक विस्तृत जवाब कैसे प्रबंधित करने के लिए विशेषाधिकार:

pgAdmin एक सुविधा है च या और अधिक परिष्कृत थोक संचालन:

enter image description here

या आप थोक देने/पलट के लिए DDL बयान बनाने के लिए प्रणाली कैटलॉग क्वेरी कर सकते हैं ...

+2

मुझे यह महसूस करने में एक घंटा लगा कि 'स्मेमा में सभी टेबलों पर अनुदान का चयन करें;' केवल यह समझ में आता है जब यह आदेश निष्पादित किया जाता है जब उपयोगकर्ता जो प्रदान कर रहा है वह उस डेटाबेस में * कनेक्ट * है। यदि नहीं, तो यह कुछ भी नहीं करता है (या कम से कम यह उपयोगकर्ता को चुनिंदा अनुमति नहीं देता है)। Superuser उपयोग \ c databasename के खोल में। – marcel

+0

@marcel: मैंने लोगों को याद दिलाने के लिए एक नोट जोड़ा। –

+0

यह उपयोगकर्ता को अनुक्रमों की अनुमति नहीं देता है। – Cerin