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

PostgreSQL:PostgreSQL डेटाबेस पर किसी उपयोगकर्ता को सभी अनुमतियां दें

सही डेटाबेस क्लस्टर से कनेक्ट होने के दौरान सभी कमांड को निष्पादित किया जाना चाहिए। इसे सुनिश्चित करें।

भूमिकाएं डेटाबेस क्लस्टर की वस्तुएं हैं . एक ही क्लस्टर के सभी डेटाबेस परिभाषित भूमिकाओं के सेट को साझा करते हैं। प्रति डेटाबेस/स्कीमा/टेबल आदि के लिए विशेषाधिकार दिए जाते हैं/निरस्त किए जाते हैं।

किसी भूमिका के लिए डेटाबेस . तक पहुंच की आवश्यकता होती है , ज़ाहिर तौर से। यह PUBLIC को दिया गया है डिफ़ॉल्ट रूप से। अन्य:

GRANT CONNECT ON DATABASE my_db TO my_user;

पोस्टग्रेज 14 या बाद के संस्करण के लिए बुनियादी विशेषाधिकार

पोस्टग्रेज़ 14 पूर्वनिर्धारित, गैर-लॉगिन भूमिकाएँ जोड़ता है pg_read_all_data / pg_write_all_data .
उनके पास SELECT है / INSERT , UPDATE , DELETE सभी के लिए विशेषाधिकार तालिकाएँ, दृश्य और क्रम। प्लस USAGE स्कीमा पर। हम GRANT कर सकते हैं इन भूमिकाओं में सदस्यता:

GRANT pg_read_all_data TO my_user;
GRANT pg_write_all_data TO my_user;

इसमें सभी बुनियादी डीएमएल कमांड शामिल हैं (लेकिन डीडीएल नहीं, और कुछ विशेष कमांड जैसे TRUNCATE नहीं हैं। या EXECUTE कार्यों के लिए विशेषाधिकार!) मैनुअल:

<ब्लॉकक्वॉट>

pg_read_all_data

सभी डेटा (तालिकाओं, दृश्यों, अनुक्रमों) को पढ़ें, जैसे कि SELECT उन वस्तुओं पर अधिकार, और USAGE सभी स्कीमाओं पर अधिकार, यहां तक ​​​​कि स्पष्ट रूप से बिना। इस भूमिका में भूमिका विशेषता नहीं हैBYPASSRLS सेट। यदि RLS का उपयोग किया जा रहा है, तो एक व्यवस्थापक BYPASSRLS . को सेट करना चाह सकता है भूमिकाओं पर जो यह भूमिका है GRANT एड टू।

pg_write_all_data

सभी डेटा (टेबल, व्यू, सीक्वेंस) लिखें, जैसे कि INSERT . हो ,UPDATE , और DELETE उन वस्तुओं पर अधिकार, और USAGE सभी स्कीमाओं पर अधिकार, यहां तक ​​कि इसे स्पष्ट रूप से न रखते हुए भी। इस भूमिका में भूमिका विशेषता नहीं है BYPASSRLS सेट। यदि RLS का उपयोग किया जा रहा है, तो एक व्यवस्थापक BYPASSRLS . सेट करना चाह सकता है भूमिकाओं पर जो यह भूमिका हैGRANT एड टू।

पूर्वनिर्धारित भूमिकाओं का उपयोग किए बिना सभी विशेषाधिकार (कोई भी पोस्टग्रेज संस्करण)

आदेशों को सही डेटाबेस से कनेक्ट होने पर निष्पादित किया जाना चाहिए। इसे सुनिश्चित करें।

भूमिका के लिए (कम से कम) USAGE . की आवश्यकता होती है स्कीमा . पर विशेषाधिकार . फिर से, यदि वह PUBLICको दिया जाता है , आप ढके हुए हैं। अन्य:

GRANT USAGE ON SCHEMA public TO my_user;

या USAGE grant प्रदान करें सभी . पर कस्टम स्कीमा:

DO
$$
BEGIN
   -- RAISE NOTICE '%', (  -- use instead of EXECUTE to see generated commands
   EXECUTE (
   SELECT string_agg(format('GRANT USAGE ON SCHEMA %I TO my_user', nspname), '; ')
   FROM   pg_namespace
   WHERE  nspname <> 'information_schema' -- exclude information schema and ...
   AND    nspname NOT LIKE 'pg\_%'        -- ... system schemas
   );
END
$$;

फिर, सभी टेबल . के लिए सभी अनुमतियां (पोस्टग्रेज की आवश्यकता है 9.0 या बाद में)।
और अनुक्रम को न भूलें (यदि कोई हो):

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO my_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO my_user;

वैकल्पिक रूप से, आप GUI के साथ काम करने के लिए pgAdmin 4 के "ग्रांट विजार्ड" का उपयोग कर सकते हैं।

कुछ अन्य ऑब्जेक्ट हैं, GRANT . के लिए मैनुअल पूरी सूची है। पोस्टग्रेज 12 के अनुसार:

<ब्लॉकक्वॉट>

डेटाबेस ऑब्जेक्ट पर विशेषाधिकार (तालिका, स्तंभ, दृश्य, विदेशी तालिका, अनुक्रम, डेटाबेस, विदेशी-डेटा आवरण, विदेशी सर्वर, फ़ंक्शन, प्रक्रिया, प्रक्रियात्मक भाषा, स्कीमा, या टेबलस्पेस)

लेकिन बाकी की शायद ही कभी जरूरत होती है। अधिक विवरण:

  • डेटाबेस बनाम स्कीमा पर उपयोगकर्ताओं के लिए डिफ़ॉल्ट विशेषाधिकार कैसे प्रबंधित करें?
  • PostgreSQL में किसी विशेष डेटाबेस के लिए विशेषाधिकार प्रदान करें
  • मनमाने उपयोगकर्ता को विचारों पर सभी विशेषाधिकार कैसे प्रदान करें

वर्तमान संस्करण में अपग्रेड करने पर विचार करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python में SSH टनलिंग के माध्यम से PostgreSQL डेटाबेस से कनेक्ट करना

  2. PostgreSQL में JSONB मान मर्ज करना?

  3. मैं कैसे (या मैं कर सकता हूँ) एकाधिक स्तंभों पर DISTINCT का चयन करें?

  4. Ubuntu 16.10 पर PostgreSQL को 9.6 से 10.0 तक अपग्रेड करें

  5. पोस्टग्रेज पर एक्सपोनेंशियल मूविंग एवरेज की गणना कैसे करें?