सही डेटाबेस क्लस्टर से कनेक्ट होने के दौरान सभी कमांड को निष्पादित किया जाना चाहिए। इसे सुनिश्चित करें।
भूमिकाएं डेटाबेस क्लस्टर की वस्तुएं हैं . एक ही क्लस्टर के सभी डेटाबेस परिभाषित भूमिकाओं के सेट को साझा करते हैं। प्रति डेटाबेस/स्कीमा/टेबल आदि के लिए विशेषाधिकार दिए जाते हैं/निरस्त किए जाते हैं।
किसी भूमिका के लिए डेटाबेस . तक पहुंच की आवश्यकता होती है , ज़ाहिर तौर से। यह 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 में किसी विशेष डेटाबेस के लिए विशेषाधिकार प्रदान करें
- मनमाने उपयोगकर्ता को विचारों पर सभी विशेषाधिकार कैसे प्रदान करें
वर्तमान संस्करण में अपग्रेड करने पर विचार करें।