सवाल मूल रूप से नीचे आता है: मैं पोस्टग्रेज़ पर सुरक्षित रूप से नए डेटाबेस कैसे बना सकता हूं, जिसका अर्थ है कि डिफ़ॉल्ट रूप से किसी के पास नए डेटाबेस पर कोई विशेषाधिकार नहीं है और सभी पहुंच स्पष्ट रूप से परिभाषित की जानी चाहिए।पोस्टग्रेस सार्वजनिक स्कीमा के साथ असुरक्षित चूक?
मैंने इंटरनेट पर विभिन्न संसाधनों का प्रयास किया लेकिन स्पष्ट उत्तर नहीं मिला। मैंने पेगोरो 17 लिनक्स पर पोस्टग्रेज़ 9.1 के साथ यह कोशिश की, लेकिन आखिरकार इसे पोस्टहार्स 8.4 के साथ रेडहाट 6.3 पर इस्तेमाल किया जाएगा।
प्रक्रिया:
- postgres, चलाने initdb स्थापित करते हैं, शुरू सर्वर
- postgres सुपर उपयोगकर्ता के साथ स्थानीय रूप से कनेक्ट
- विकल्पों createdb के साथ नए उपयोगकर्ता u1 बना सकते हैं और createrole
- डिस्कनेक्ट और U1 के रूप में फिर से कनेक्ट
- डेटाबेस बनाएँ db1
- उपयोगकर्ता यू 2
- डिस्कनेक्ट और U2
- DB1
में तालिका t1 बनाने मैं कि अंतिम चरण के सफल होने की उम्मीद नहीं कर के रूप में फिर से कनेक्ट। u2 को डीबी 1 पर कोई विशेषाधिकार नहीं दिया गया है और डेटाबेस या स्कीमा से पूछताछ करते समय भी कोई विशेषाधिकार नहीं दिखता है। मेरी समझ के लिए u2 सार्वजनिक स्कीमा और बिल्ड-इन सार्वजनिक भूमिका के लिए डिफ़ॉल्ट विशेषाधिकारों के कारण डीबी 1 पर टेबल बना सकता है। अगर मैं उन्हें रद्द करना चाहता हूं तो मैं केवल डेटाबेस पर ऐसा कर सकता हूं लेकिन स्कीमा पर नहीं, क्योंकि यह पोस्टग्रेज़ के स्वामित्व में है। इसलिए अंततः मुझे उन विशेषाधिकारों को एक नए उपयोगकर्ता के साथ दो नए डेटाबेस के लिए निरस्त करना होगा। मैं इसे डेटाबेस के मालिक को सौंप नहीं सकता हूं और मुझे हर नए डेटाबेस के लिए इसे भी नहीं करना चाहिए।
डिफ़ॉल्ट प्रत्येक उपयोगकर्ता को किसी भी नए डेटाबेस में सार्वजनिक स्कीमा को स्पैम करने की अनुमति देगा। यह खतरनाक है क्योंकि अन्य उपयोगकर्ता सार्वजनिक स्कीमा पर डिफ़ॉल्ट रूप से काम कर सकते हैं और यह जांच नहीं सकते कि तालिकाएं पहले से मौजूद हैं और केवल कुछ अजनबी के स्वामित्व वाले मौजूदा लोगों का उपयोग करें।
मैं इन असुरक्षित डिफ़ॉल्ट को कैसे ठीक कर सकता हूं?
पहला सुझाव वास्तव में के बाद से मैं तो अभी भी सुपर उपयोगकर्ता की जरूरत है व्यक्तिगत उपयोगकर्ताओं को सार्वजनिक स्कीमा पर विशेषाधिकार देना काम नहीं करता है चूंकि यह अभी भी रूट के स्वामित्व में है, और मैं इस कार्य को एक गैर-सुपर उपयोगकर्ता को सौंपना चाहता हूं। लेकिन दूसरा सुझाव काम करता है, बस हमेशा एक नए डेटाबेस के साथ सार्वजनिक स्कीमा बनाने और स्कीमा पर विशेषाधिकार देने के लिए याद रखना होगा। धन्यवाद! – anselm