2012-01-19 8 views
35

मैं psql में किसी निश्चित डेटाबेस के लिए उपयोगकर्ताओं की एक सूची प्राप्त करना चाहता हूं - उदाहरण के लिए "template0"। उपयोगकर्ता कौन हैं? या "टेम्पलेट 1" डेटाबेस के लिए: - वहां उपयोगकर्ता कौन हैं?PostgreSQL उपयोगकर्ता सूची

पहले से ही करने की कोशिश की:

\du+ -- no database is Listed not Users 
Select * from "pg_users"; -- no database is listed 

उत्तर

71

उपयोगकर्ता वास्तव में नहीं हैं, "डेटाबेस के लिए", वे क्लस्टर के लिए कर रहे हैं और उपयोग डेटाबेस के लिए अलग-अलग अनुमतियां दी जाती है। उपयोगकर्ताओं को सूचीबद्ध करने के लिए \du करना चाहिए, लेकिन आपको कनेक्ट होने की आवश्यकता है। कुछ

psql template1 -c '\du' 

कमांड लाइन प्रॉम्प्ट से करना चाहिए। (या \du psql प्रॉम्प्ट से जब आप डेटाबेस से कनेक्ट होते हैं)।

+0

@ माइकल, मदद के लिए एक टन धन्यवाद। –

+0

आपका स्वागत है। –

12

आपको समझना होगा कि PostgreSQL उपयोगकर्ताओं में प्रति डेटाबेस क्लस्टर हैं। @ माइकल पहले से ही दिखाता है कि उन लोगों की सूची कैसे प्राप्त करें।

इसलिए, जब तक आप किसी विशेष डेटाबेस के लिए REVOKE और GRANT के साथ अनुमतियों को प्रतिबंधित नहीं करते हैं, तब तक क्लस्टर में सभी उपयोगकर्ताओं के पास क्लस्टर में किसी भी डेटाबेस तक मूल पहुंच होती है।

निर्धारित करने के लिए, एक विशिष्ट उपयोगकर्ता वास्तव में एक डेटाबेस के लिए एक निश्चित विशेषाधिकार ('कनेक्ट') है या नहीं:

has_database_privilege(user, database, privilege) 

privilege functions in the manual के बारे में अधिक।

एक विशिष्ट डेटाबेस के लिए सभी विशिष्ट विशेषाधिकार यह निर्धारित करने के लिए:

SELECT datname, datacl 
FROM pg_database 
WHERE datname = 'mydb'; 

आप datacl के लिए NULL प्राप्त करता है, तो कोई विशिष्ट प्रतिबंध लागू।


कि आप pg_hba.conf फ़ाइल में डेटाबेस प्रति का उपयोग और प्रति उपयोगकर्ता सीमित कर सकते हैं के अलावा

। यह निचले स्तर पर है। उपयोगकर्ता कनेक्ट भी नहीं कर सकता है, अगर pg_hba.conf उसे नहीं जाने देगा, भले ही डेटाबेस स्वयं पहुंच की अनुमति दे।

+0

@ एरविन, @ माइकल, मदद के लिए एक टन धन्यवाद। –

+2

यह भी ध्यान दें, हाल के संस्करणों पर आप डीबी के लिए कनेक्ट विशेषाधिकार प्रदान/रद्द कर सकते हैं। –

3

सूचीबद्ध करने के लिए भूमिकाओं/उपयोगकर्ता

pg_roles से

चयन rolname;