TL; DR: नए उपयोगकर्ता public
स्कीमा में तालिकाओं का निर्माण कर सकते हैं क्योंकि लोगों ने शिकायत की थी कि यह बहुत कठिन था जब वे नहीं कर सकते थे।
यदि आप डिफॉल्ट्स को नापसंद करते हैं, तो आपको संभवत: प्रारंभिक कॉन्फ़िगरेशन के साथ एक नया टेम्प्लेट डेटाबेस बनाना चाहिए। उदाहरण के लिए, आप:
DROP SCHEMA public;
या
REVOKE ALL ON SCHEMA public FROM public;
GRANT USAGE ON SCHEMA public TO public;
अपने टेम्पलेट में।
यदि आप चाहते हैं कि public
उपयोगकर्ता के पास डेटाबेस पर कोई अधिकार न हो, तो आपको इसके अतिरिक्त होना चाहिए:
REVOKE ALL ON DATABASE mydbname FROM public;
GRANT CONNECT ON DATABASE mydbname TO public;
ताकि public
उपयोगकर्ता स्कीमा न बना सके या टेम्प टेबल का उपयोग न कर सके।
व्यक्तिगत रूप से, अगर मैं इसे डिजाइन कर रहा था, तो मैं उपयोगकर्ताओं को TEMP
डेटाबेस पर डिफ़ॉल्ट रूप से अधिकार दूंगा , लेकिन CREATE
डेटाबेस में स्कीमा (स्कीमा में CREATE
टेबल ) या नहीं public
। मैं उन्हें मालिक के लिए आरक्षित करूँगा।
वे विकल्प हैं जो एक लंबे समय से पहले किए गए थे, हालांकि, और अब उन्हें बदलना बहुत कठिन है।
जैसा कि होता है, नियमित शिकायतें होती हैं कि PostgreSQL के साथ शुरुआत करना बहुत कठिन है क्योंकि आपको एक उपयोगकर्ता खाता बनाना होगा और अक्सर एक डेटाबेस भी बनाना होगा। हम इसे आसान बनाने के लिए केवल ऑटो-मोड क्यों नहीं बनाते हैं और इसे 'ट्रस्ट' के रूप में डिफ़ॉल्ट बनाते हैं? postgres
उपयोगकर्ता पासवर्ड रखने के लिए डिफ़ॉल्ट क्यों नहीं है postgres
? अगर हम OS में मौजूद हैं, तो हम केवल उपयोगकर्ताओं को ही क्यों नहीं बनाते हैं? आदि।
नए उपयोगकर्ताओं के लिए कुछ वास्तविक प्रयोज्य समस्याएं हैं - विशेष रूप से, अधिकांश लोगों को पता नहीं है कि कौन सी peer
वस्तु क्या है, या सिर्फ psql
पोस्टग्रेक्यूएल स्थापित करने के बाद क्यों चल रहा है उन्हें बताता है कि वे जिस नाम से लॉग इन किए हैं उस नाम से कोई उपयोगकर्ता नहीं है।
यह भी गड़बड़ है कि pg_hba.conf
एक कॉन्फिग फाइल है, लेकिन उपयोगकर्ता SQL स्तर पर बनाए जाते हैं। यह विभाजन उपयोगकर्ताओं को भ्रमित करता है।
हालाँकि, बहुत सारी चीज़ें सुरक्षित चूक और आसान चूक के बीच समझौता करती हैं, जहाँ परियोजना कभी भी सभी को खुश करने वाली नहीं है।
revoke create on database [databasename] from [username];
और DB अब वास्तव में केवल [उपयोगकर्ता नाम] के लिए पढ़ा जाता है। सही? मैं इस उत्तर पर फिर से आऊंगा जब मैंने एक अच्छी पोस्टग्रैज पुस्तक पढ़ी है :)