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

PostgreSQL में किसी विशेष डेटाबेस के लिए विशेषाधिकार प्रदान करें

पोस्टग्रेज में मूल अवधारणा

भूमिकाएं वैश्विक वस्तुएं हैं जो एक डीबी क्लस्टर में सभी डेटाबेस तक पहुंच सकती हैं - आवश्यक विशेषाधिकार दिए गए हैं।

एक क्लस्टर कई डेटाबेस रखता है , जिसमें कई स्कीमा . हैं . विभिन्न डीबी में स्कीमा (यहां तक ​​​​कि एक ही नाम के साथ) असंबंधित हैं। किसी स्कीमा के लिए विशेषाधिकार देना केवल वर्तमान डीबी (अनुदान के समय वर्तमान डीबी) में इस विशेष स्कीमा पर लागू होता है।

प्रत्येक डेटाबेस एक स्कीमा से शुरू होता है public डिफ़ॉल्ट रूप से। यह एक परंपरा है, और कई सेटिंग्स इसके साथ शुरू होती हैं। इसके अलावा, स्कीमा public किसी अन्य की तरह ही एक स्कीमा है।

MySQL से आ रहा है, आप एक एकल स्कीमा public के साथ शुरू करना चाह सकते हैं , स्कीमा परत को पूरी तरह से प्रभावी ढंग से अनदेखा कर रहा है। मैं नियमित रूप से प्रति डेटाबेस दर्जनों स्कीमा का उपयोग कर रहा हूं।
स्कीमा फ़ाइल सिस्टम में निर्देशिकाओं की तरह थोड़ी (लेकिन पूरी तरह से नहीं) हैं।

एक बार जब आप एक से अधिक स्कीमा का उपयोग कर लेते हैं, तो search_path को समझना सुनिश्चित करें सेटिंग:

  • खोज_पथ पहचानकर्ता संकल्प और "वर्तमान स्कीमा" को कैसे प्रभावित करता है

डिफ़ॉल्ट विशेषाधिकार

GRANT . पर प्रति दस्तावेज़ीकरण :

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

पोस्टग्रेएसक्यूएल कुछ प्रकार की वस्तुओं पर डिफ़ॉल्ट विशेषाधिकार देता हैpublic . public . को कोई विशेषाधिकार नहीं दिया जाता है टेबल, कॉलम, स्कीमा या टेबलस्पेस पर डिफ़ॉल्ट रूप से। अन्य प्रकारों के लिए, public . को दिए गए डिफ़ॉल्ट विशेषाधिकार इस प्रकार हैं:CONNECT और CREATE TEMP TABLE डेटाबेस के लिए; EXECUTE कार्यों के लिए विशेषाधिकार; और USAGE भाषाओं के लिए विशेषाधिकार।

इन सभी डिफ़ॉल्ट को ALTER DEFAULT PRIVILEGES . के साथ बदला जा सकता है :

  • डीबी में एक विशिष्ट स्कीमा पर सभी को पोस्टग्रेएसक्यूएल में एक समूह भूमिका के लिए अनुदान दें

समूह भूमिका

जैसे @Craig ने टिप्पणी की, यह GRANT के लिए सबसे अच्छा है समूह भूमिका के लिए विशेषाधिकार और फिर उस भूमिका का एक विशिष्ट उपयोगकर्ता सदस्य बनाएं (GRANT उपयोगकर्ता भूमिका के लिए समूह भूमिका)। इस तरह कुछ कार्यों के लिए आवश्यक विशेषाधिकारों के बंडल को निपटाना और रद्द करना आसान हो जाता है।

लॉगिन के बिना एक समूह भूमिका सिर्फ एक और भूमिका है। इसे उपयोगकर्ता भूमिका में बदलने के लिए एक लॉगिन जोड़ें। अधिक:

  • पोस्टग्रेएसक्यूएल ने उपयोगकर्ताओं और समूहों को भूमिकाओं में क्यों मिला दिया?

पूर्वनिर्धारित भूमिकाएं

अपडेट करें: पोस्टग्रेज 14 या बाद में नई पूर्वनिर्धारित भूमिकाएँ जोड़ता है (औपचारिक रूप से "डिफ़ॉल्ट भूमिकाएँ") pg_read_all_data और pg_write_all_data निम्नलिखित में से कुछ को सरल बनाने के लिए। देखें:

  • डेटाबेस की सभी तालिकाओं तक पहुंच प्रदान करें

नुस्खा

मान लीजिए, हमारे पास एक नया डेटाबेस है mydb , एक समूह mygrp , और एक उपयोगकर्ता myusr ...

सुपरयूज़र के रूप में विचाराधीन डेटाबेस से कनेक्ट होने के दौरान (postgres उदाहरण के लिए):

REVOKE ALL ON DATABASE mydb FROM public;  -- shut out the general public
GRANT CONNECT ON DATABASE mydb TO mygrp;  -- since we revoked from public

GRANT USAGE ON SCHEMA public TO mygrp;

"एक उपयोगकर्ता को सभी तालिकाओं के लिए सभी विशेषाधिकार" असाइन करने के लिए जैसा आपने लिखा (मैं अधिक प्रतिबंधात्मक हो सकता हूं):

GRANT ALL ON ALL TABLES IN SCHEMA public TO mygrp;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO mygrp; -- don't forget those

भविष्य की वस्तुओं के लिए डिफ़ॉल्ट विशेषाधिकार सेट करने के लिए, हर भूमिका के लिए दौड़ें जो इस स्कीमा में ऑब्जेक्ट बनाता है:

ALTER DEFAULT PRIVILEGES FOR ROLE myusr IN SCHEMA public
GRANT ALL ON TABLES TO mygrp;

ALTER DEFAULT PRIVILEGES FOR ROLE myusr IN SCHEMA public
GRANT ALL ON SEQUENCES TO mygrp;

-- more roles?

अब, उपयोगकर्ता को समूह प्रदान करें:

GRANT mygrp TO myusr;

संबंधित उत्तर:

  • PostgreSQL - DB उपयोगकर्ता को केवल फ़ंक्शन कॉल करने की अनुमति दी जानी चाहिए

वैकल्पिक (गैर-मानक) सेटिंग

MySQL से आ रहा है, और चूंकि आप डेटाबेस पर विशेषाधिकारों को अलग रखना चाहते हैं, आपको यह गैर-मानक सेटिंग पसंद आ सकती है db_user_namespace . प्रति दस्तावेज़:

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

यह पैरामीटर प्रति-डेटाबेस उपयोगकर्ता नाम सक्षम करता है। यह डिफ़ॉल्ट रूप से बंद है।

मैनुअल को ध्यान से पढ़ें। मैं इस सेटिंग का उपयोग नहीं करता। यह उपरोक्त को रद्द नहीं करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2d सरणी से 1d सरणी का चयन कैसे करें?

  2. PostgreSQL में हर शब्द के पहले अक्षर को कैपिटलाइज़ कैसे करें

  3. PGDay.IT 2011 के लिए अर्ली बर्ड रजिस्ट्रेशन शुरू

  4. "PostgreSQL 9.0 उच्च प्रदर्शन" पुस्तक प्रकाशित हो चुकी है।

  5. मैं हेरोकू पर 5 एमबी पोस्टग्रेएसक्यूएल में कितने रिकॉर्ड स्टोर कर सकता हूं?