एक नया उपयोगकर्ता PostgreSQL में टेबल बनाने में सक्षम क्यों है?


13

मैंने DB बनाने के लिए दो ट्यूटोरियल का अनुसरण किया:

  1. पूरी तरह से विशेषाधिकार प्राप्त उपयोगकर्ता लिंक
  2. केवल पढ़ने के लिए उपयोगकर्ता लिंक

मुझे तब सीजे एस्टेल के ट्यूटोरियल से एक टिप मिली, जिसमें कहा गया था कि "आपको टेबल बनाने की क्षमता विरासत में मिली होगी, भले ही हमने इसे स्पष्ट रूप से अपने नए उपयोगकर्ता को न दिया हो"। यकीन है कि पर्याप्त है, केवल पढ़ने के लिए उपयोगकर्ता बनाने में सक्षम है और खुद की टेबल!

CJ एस्टेल ने मूल कारण को बहुत अच्छी तरह से इंगित किया है, अर्थात् एक टेम्पलेट डेटाबेस। लेकिन टेबल बनाने की क्षमता सबसे अधिक ट्यूटोरियल को नजरअंदाज करती है, जिसे आप gogrling से प्राप्त करते हैं "postgresql.org पर होस्ट किए गए एक सहित" केवल उपयोगकर्ता पोस्टग्रेज को पढ़ें " । आपके उपयोगकर्ता के पास केवल-पढ़ने के लिए विशेषाधिकार हैं!

किसी नए उपयोगकर्ता में यह क्षमता क्यों है? इस विशेषाधिकार को रद्द करने के बाद, क्या डेटाबेस वास्तव में केवल उस उपयोगकर्ता के लिए पढ़ा जाता है?

जवाबों:


13

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 अब वास्तव में केवल [उपयोगकर्ता नाम] के लिए पढ़ा जाता है। सही? मैं इस उत्तर पर फिर से आऊंगा जब मैंने एक अच्छी पोस्टग्रैज पुस्तक पढ़ी है :)
जेसविन जोस

2
पिछली टिप्पणी के जवाब में, यह एक नहीं है।
जेसविन जोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.