सबसे पहले, आपको प्रश्नों को चलाने के लिए डेटाबेस से कनेक्ट करने में सक्षम होना चाहिए। इससे हासिल किया जा सकता है
REVOKE CONNECT ON DATABASE your_database FROM PUBLIC;
GRANT CONNECT
ON DATABASE database_name
TO user_name;
REVOKEआवश्यक है क्योंकि
PUBLIC शब्द मुख्य संकेत देता है कि विशेषाधिकार सभी भूमिकाओं को दिए जाने हैं, जिनमें वे भी शामिल हैं जिन्हें बाद में बनाया जा सकता है। सार्वजनिक रूप से एक परिभाषित परिभाषित समूह के रूप में सोचा जा सकता है जिसमें हमेशा सभी भूमिकाएं शामिल होती हैं। किसी विशेष भूमिका में विशेषाधिकारों की राशि सीधे दी जाएगी, विशेष रूप से किसी भी भूमिका के लिए दी गई विशेषाधिकार विशेष रूप से और PUBLIC को दिए गए विशेषाधिकार हैं।
यदि आप वास्तव में अपने उपयोगकर्ता को डीएमएल बयानों तक सीमित करना चाहते हैं, तो आपके पास करने के लिए थोड़ा और है:
REVOKE ALL
ON ALL TABLES IN SCHEMA public
FROM PUBLIC;
GRANT SELECT, INSERT, UPDATE, DELETE
ON ALL TABLES IN SCHEMA public
TO user_name;
ये मानते हैं कि आपके पास केवल एक स्कीमा होगा (जिसे डिफ़ॉल्ट रूप से 'सार्वजनिक' नाम दिया गया है)।
जैसा कि जैक डगलस ने कहा, उपरोक्त केवल पहले से मौजूद तालिकाओं के लिए विशेषाधिकार देता है । भविष्य की तालिकाओं के लिए समान प्राप्त करने के लिए, आपको डिफ़ॉल्ट विशेषाधिकारों को परिभाषित करना होगा :
ALTER DEFAULT PRIVILEGES
FOR ROLE some_role -- Alternatively "FOR USER"
IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO user_name;
यहां, some_roleएक भूमिका है जो तालिकाओं का निर्माण करती है, जबकि user_nameएक है जिसे विशेषाधिकार प्राप्त होता है। इसे परिभाषित करते हुए, आपको इसके some_roleसदस्य या सदस्य के रूप में लॉग इन करना होगा।
और, अंत में, आपको दृश्यों के लिए भी ऐसा ही करना होगा (इसे इंगित करने के लिए प्लेडफ़ैन के लिए धन्यवाद) - यहां यह USAGEविशेषाधिकार है जो आपको चाहिए।
FOR some_roleवह महत्वपूर्ण हिस्सा था जिसे मैं बाद में बनाए गए अपने टेबल के लिए काम करने के लिए याद कर रहा था। लेकिन मुझे इसमें लॉग इन करने की आवश्यकता नहीं थीsome_role, अगर मैंने डिफ़ॉल्ट व्यवस्थापकpostgresउपयोगकर्ता के रूप में क्वेरी को निष्पादित किया तो यह भी काम किया ।