2011-04-19 16 views
17

GRANT CONNECT ON DATABASE <database> TO <user> जारी किए गए उपयोगकर्ताओं को आप कैसे देखते हैं?PostgreSQL: डेटाबेस कनेक्ट अनुमतियां देखें

  • \ डी पी - सूचियों तालिका/अनुमतियां देखें
  • \ dn + - सूचियों स्कीमा अनुमतियाँ
  • \ एल + सभी उपयोगकर्ताओं को डेटाबेस
+0

वाह यह सवाल पुराना है और ऐसा लगता है कि मैंने कभी जवाब नहीं चुना। मुझे लगता है कि ऐसा इसलिए है क्योंकि उस समय मैं कुछ और ढूंढ रहा था। मैंने थोड़ी देर में इस पर ध्यान नहीं दिया है, इसलिए अगर यह गलत है तो मैं क्षमा चाहता हूं। मुझे लगता है कि pg_hba.conf फ़ाइल उपयोगकर्ताओं को एक सर्वर से कनेक्ट करने की अनुमति देती है, बिना किसी स्पष्ट अनुदान के। इसलिए, जिन डेटाबेसों को लॉक नहीं किया गया है उन्हें किसी भी व्यक्ति द्वारा वर्चुअल रूप से अनुमति दी जा सकती है, जिसे '\ l' कमांड कभी भी नहीं पता हो सकता है। – vol7ron

उत्तर

0

मैं से psql उपयोग कर रहा हूँ का उपयोग कर सकते की सूची नहीं है postgres 8.4 और postgres 9.0, और आदेश \l या \l+ मुझे स्तंभ Access Privileges मैं कहाँ है देता प्रविष्टि:

<user_name>=c/<database_name> 

और इससे पहले मैंने उपयोगकर्ता को कनेक्ट विशेषाधिकार दिया था जैसा आप चाहते थे।

जैसा कि यह पृष्ठ http://www.postgresql.org/docs/9.0/static/sql-grant.html पर बताता है, c पत्र यहां Connect है।

+0

सही, लेकिन यह सभी उपयोगकर्ताओं को सूचीबद्ध नहीं कर रहा है। मुझे लगता है कि यह एक सीमा हो सकती है। या शायद pg_hba.conf पहले कुछ कर रहा है। – vol7ron

18

थोड़ा अजीब अगर \ l + आदेश केवल उन उपयोगकर्ताओं को प्रदर्शित करता है जिनके पास डेटाबेस से कनेक्ट करने के लिए अनुमति/विशेषाधिकार है। मैं खुद को PostgreSQL 8.4 स्थापना (उबंटू 10.04 एलटीएस) पर दोहराना नहीं कर सका। आप कौन सा संस्करण उपयोग कर रहे हैं?

SELECT datname as "Relation", datacl as "Access permissions" FROM pg_database WHERE datname = 'databasename'; 

आप बस एक उपयोगकर्ता आप कर सकते थे जाँच करना चाहते हैं:

वैसे भी, शायद आप अनुमान उपयोगकर्ता सही विशेषाधिकार हैं या नहीं कि विशेष रूप से डेटाबेस के लिए और कहा कि से एसीएल के पकड़े तालिका की जांच कर सकता ऐसा कुछ करें:

SELECT * FROM has_database_privilege('username', 'database', 'connect'); 

व्याख्या करने के लिए अनुमति/विशेषाधिकार कैसे हैं? विशेषाधिकार इस तरह पढ़ने के लिए कर रहे हैं:

user = privileges/granted by 

छोड़ना उपयोगकर्ता मतलब यह है कि सार्वजनिक विशेषाधिकार है, यानी सभी भूमिकाओं दी जाती है। उदाहरण के लिए यदि विशेषाधिकार =Tc/postgres है तो सभी भूमिकाएं उस विशेष डेटाबेस में अस्थायी तालिकाओं को कनेक्ट और निर्माण कर सकती हैं और यह postgres उपयोगकर्ता है जो विशेषाधिकार प्रदान करता है।

PostgreSQL साइट http://www.postgresql.org/docs/9.2/static/sql-grant.html पर विभिन्न विशेषाधिकारों को समझाते हुए PostgreSQL साइट पर एक सारांश है।

rolename=xxxx -- privileges granted to a role 
     =xxxx -- privileges granted to PUBLIC 

      r -- SELECT ("read") 
      w -- UPDATE ("write") 
      a -- INSERT ("append") 
      d -- DELETE 
      D -- TRUNCATE 
      x -- REFERENCES 
      t -- TRIGGER 
      X -- EXECUTE 
      U -- USAGE 
      C -- CREATE 
      c -- CONNECT 
      T -- TEMPORARY 
     arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects) 
      * -- grant option for preceding privilege 

     /yyyy -- role that granted this privilege 
+0

जॉन, मैं इसे देख लूंगा। मुझे विश्वास है कि मैं 8.4 संस्करण पर भी परीक्षण कर रहा था। मुझे लगता है कि मैं इसे पूछने में सक्षम हो सकता हूं, लेकिन मैं उम्मीद कर रहा था कि ऐसा करने के लिए शॉर्टकट कमांड होगा। भले ही, मुझे यह देखना होगा कि मुझे अनोखा मामला याद है या नहीं, जो इसे मेरे ध्यान में लाया। – vol7ron

+0

कुछ समय बीतने के बाद से मैंने यह प्रश्न देखा। 8.4 और नहीं, मुझे पता है कि ऐसे खाते हैं जो डेटाबेस में पहुंच सकते हैं जो सूची में नहीं दिखाए जा रहे हैं ... जब तक ...प्रश्न: इसका अर्थ यह नहीं है कि जब कोई उपयोगकर्ता '= टीसी/' के बराबर चिह्न से पहले सूचीबद्ध नहीं होता है? क्या इसका मतलब है कि किसी के पास अस्थायी कनेक्ट है? – vol7ron

+0

हां। वैसे भी अच्छा सवाल है, मैंने जवाब अपडेट किया है कि विशेषाधिकारों का अर्थ कैसे लिया जाता है। –

संबंधित मुद्दे