एक ही तालिका का उपयोग करें / चयन करें
यदि आप केवल एक डेटाबेस से संबंध प्रदान करते हैं, तो उपयोगकर्ता कनेक्ट कर सकता है, लेकिन कोई अन्य विशेषाधिकार नहीं है। आपको नामस्थान (स्कीमा) पर USAGE देना होगा और व्यक्तिगत रूप से तालिकाओं और विचारों पर चयन करना होगा:
GRANT CONNECT ON DATABASE mydb TO xxx;
-- This assumes you're actually connected to mydb..
GRANT USAGE ON SCHEMA public TO xxx;
GRANT SELECT ON mytable TO xxx;
एकाधिक तालिकाएँ / दृश्य (पोस्टग्रैसक्यूएल 9.0+)
PostgreSQL के नवीनतम संस्करणों में, आप स्कीमा में सभी तालिकाओं / दृश्यों / आदि पर एक ही आदेश को टाइप करने के बजाय एक-एक करके उन्हें अनुमति दे सकते हैं:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO xxx;
यह केवल उन तालिकाओं को प्रभावित करता है जो पहले ही बनाई जा चुकी हैं। अधिक शक्तिशाली रूप से, आप भविष्य में नई वस्तुओं के लिए स्वचालित रूप से डिफ़ॉल्ट भूमिकाएं दे सकते हैं:
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO xxx;
ध्यान दें कि यह केवल इस कमांड को जारी करने वाले उपयोगकर्ता द्वारा बनाई गई वस्तुओं (तालिकाओं) को प्रभावित करेगा: हालांकि यह किसी भी भूमिका पर भी सेट किया जा सकता है कि जारी करने वाला उपयोगकर्ता इसका सदस्य है। हालाँकि, आप नई भूमिकाओं को बनाते समय सभी भूमिकाओं के लिए डिफ़ॉल्ट विशेषाधिकारों को नहीं चुनते हैं ... इसलिए अभी भी कुछ गड़बड़ है। यदि आप उस दृष्टिकोण को अपनाते हैं जिसमें एक डेटाबेस की अपनी भूमिका होती है, और स्कीमा परिवर्तन उस मालिक की भूमिका के रूप में किए जाते हैं, तो आपको उस स्वामित्व भूमिका के लिए डिफ़ॉल्ट विशेषाधिकार निर्दिष्ट करना चाहिए। IMHO यह सब थोड़ा भ्रमित करने वाला है और आपको एक कार्यात्मक वर्कफ़्लो के साथ आने के लिए प्रयोग करने की आवश्यकता हो सकती है।
एकाधिक तालिकाएं / दृश्य (9.0 से पहले पोस्टग्रेजक्यूएल संस्करण)
लंबी, बहु-तालिका परिवर्तनों में त्रुटियों से बचने के GRANT SELECT
लिए, प्रत्येक व्यक्ति को आवश्यक उत्पन्न करने के लिए निम्नलिखित 'स्वचालित' प्रक्रिया का उपयोग करने की सिफारिश की जाती है :
SELECT 'GRANT SELECT ON ' || relname || ' TO xxx;'
FROM pg_class JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
WHERE nspname = 'public' AND relkind IN ('r', 'v', 'S');
यह कॉपी-एन-पेस्ट प्यार के लिए प्रासंगिक टेबल कमांड को सभी तालिकाओं, विचारों और दृश्यों में सार्वजनिक रूप से चयन करने के लिए आउटपुट करना चाहिए। स्वाभाविक रूप से, यह केवल उन तालिकाओं पर लागू किया जाएगा जो पहले से ही बनाए गए हैं।