PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

आप PostgreSQL में केवल-पढ़ने के लिए उपयोगकर्ता कैसे बनाते हैं?

उपयोग की अनुमति दें/एक ही तालिका में चयन करें

यदि आप केवल एक डेटाबेस से कनेक्ट करते हैं, तो उपयोगकर्ता कनेक्ट हो सकता है लेकिन उसके पास कोई अन्य विशेषाधिकार नहीं है। आपको नेमस्पेस (स्कीमा) पर 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;

एकाधिक टेबल/दृश्य (PostgreSQL 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');

यह कॉपी-एन-पेस्ट प्यार के लिए सार्वजनिक रूप से सभी तालिकाओं, दृश्यों और अनुक्रमों पर चयन अनुदान के लिए प्रासंगिक अनुदान आदेशों को आउटपुट करना चाहिए। स्वाभाविक रूप से, यह केवल उन तालिकाओं पर लागू होगा जो पहले ही बनाई जा चुकी हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में दशमलव बिंदु के बाद गैर-शून्य रिकॉर्ड प्राप्त करें

  2. एक ही प्राथमिक कुंजी के लिए एक मैप किए गए वर्ग में SQLAlchemy एकाधिक विदेशी कुंजी

  3. Node.js . के माध्यम से Postgres से संबंध कैसे बनाएं

  4. PostgreSQL ट्रिगर्स को यूजर आईडी पास करना

  5. PostgreSQL में शामिल होने के तरीकों का अवलोकन