मैं PostgreSQL में बैकअप के लिए आसानी से उपयोगकर्ता कैसे बना सकता हूं?


15

क्या यह सच है कि PostgreSQL में एक आसानी से बैकअप उपयोगकर्ता बनाना IMPOSSIBLE है?

मुझे एक आईआरसी चैनल पर सलाह दी गई है कि आपके पास बस बैकअप नहीं हो सकता है जिसमें कोई स्वामित्व विशेषाधिकार नहीं है। मुझे यह बहुत अजीब लगता है इसलिए मैं यह सुनिश्चित करना चाहता हूं कि मुझे कुछ याद नहीं है।

नीचे मैंने कोशिश की है, लेकिन यह मुझे वह परिणाम नहीं दे रहा है जिसकी मुझे तलाश है। जब मैं pg_dumpकिसी दी गई मेज पर करता हूं तो मुझे मिल रहा है Permission denied for relation...:

GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup; 
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO backup; 
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO backup;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, USAGE ON SEQUENCES TO backup;

किसी भी तरह की सहायता का स्वागत किया जाएगा!


जवाबों:


9

नहीं, यह आसान है (अब वैसे भी)।

  1. एक नए उपयोगकर्ता पर कनेक्ट की अनुमति दें

    GRANT CONNECT ON DATABASE mydb TO myReadolyUser;
  2. सभी वर्तमान डेटाबेस ऑब्जेक्ट पर अनुमतियाँ प्रदान करें। यह स्कीमा-विशिष्ट है, और आपको अपने उपयोगकर्ता के उपयोग के लिए इच्छित प्रत्येक स्कीमा के लिए एक प्रति चलानी होगी,

    GRANT SELECT ON ALL TABLES IN SCHEMA mySchema TO myReadonlyUser;

    से डॉक्स , ALL TABLESसब कुछ आप चाहते हैं भी शामिल है।

    एक या अधिक स्कीमा के भीतर एक ही प्रकार की सभी वस्तुओं पर विशेषाधिकार देने का विकल्प भी है। यह कार्यक्षमता वर्तमान में केवल तालिकाओं, अनुक्रमों और कार्यों के लिए समर्थित है (लेकिन ध्यान दें कि सभी टैब को विचारों और विदेशी तालिकाओं को शामिल करने के लिए माना जाता है।

  3. फिर अभी तक नहीं बनाई गई वस्तुओं के लिए भविष्य के विशेषाधिकार ALTER DEFAULT PRIVLEGESदेने के लिए। SELECT

    ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema
    GRANT SELECT ON TABLES TO myReadonlyUser;

मैंने देखा कि दौड़ते समय ALTER DEFAULT PRIVILEGES ... myReadonlyUser, डंप में 2 अतिरिक्त लाइनें जोड़ी जाती हैं ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM root;:। इस तरह लगता है कि रूट का मतलब नए टेबल पर कुछ भी करने में सक्षम नहीं होगा। क्या ये सच है?
dthor

इसके अलावा, यदि आपके टेबल bigintआपके GRANT SELECT ON ALL SEQUENCES
रीडऑनली

6

सरल और अच्छा तरीका यह है कि केवल अनुमति के साथ एक सुपरयुसर बनाएं।

  • psqlपोस्टग्रेज या अन्य सुपरयूजर के रूप में लॉगिन करें ।
  • नई सुपरयुसर भूमिका बनाएं और इसे केवल पढ़ने के लिए सेट करें:

    CREATE USER backadm SUPERUSER  password '<PASS>';
    ALTER USER backadm set default_transaction_read_only = on;
    • <PASS>अपने चुने हुए पासवर्ड से बदलें ।
    • आप backadmचुना उपयोगकर्ता नाम से बदल सकते हैं । (मैं डाल backadmके लिए Backup Administrator)।
    • पासवर्ड के लिए एकल उद्धरण मत भूलना।

अब आप इस भूमिका का बैकअप ले सकते हैं।


6
Ewww। बैकअप के लिए एक सुपरयुसर? उन्होंने विशेष रूप से केवल पढ़ने के लिए कहा। वह उपयोगकर्ता डेटाबेस में अप्रतिबंधित पहुंच से एक SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITEया ALTER USER backadm set default_transaction_read_only = off;दूर है।
इवान कैरोल

यह उपयोगकर्ता अभी भी टेबल / स्कीमा / डेटाबेस को छोड़ सकता है, इस बात की परवाह किए बिना कि लेन-देन केवल पढ़ा जाता है।
इगोर मुखिन

4

ध्यान दें कि @Gyre द्वारा दिए गए उत्तर में उल्लिखित ब्लॉग "एप्लिकेशन" केवल-उपयोगकर्ता (यानी, डेटाबेस से कनेक्ट करने के लिए वेब अनुप्रयोग के लिए केवल पढ़ने के लिए भूमिका बनाने के लिए) के लिए काम नहीं करेगा, और एक गंभीर खोल सकता है सुरक्षा भेद्यता, इसके आसानी से परिवहनीय होने के बाद से, जैसा कि इस पोस्टग्रैस्कल सूची की प्रतिक्रिया में बताया गया है । संदर्भ के लिए, क्लाइंट द्वारा सत्र सेटिंग्स को ओवरराइड करके:

SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE

प्रश्न में पोस्ट किए गए एक के समान, अधिक विस्तृत विधि के लिए पोस्ट विक्री में जुड़े हुए पोस्टग्रेजल में प्रेजेंटेशन के प्रबंध अधिकार देखें ।


यह वास्तव में एक उत्तर नहीं है, यह असुरक्षित होने के लिए अन्य उत्तरों पर एक आलोचना है जिसे मैंने एक टिप्पणी के रूप में कॉपी किया है। मैंने अभी इस प्रश्न का उत्तर दिया है।
इवान कैरोल

3

इवान कैरोल के समाधान के साथ बैकअप लेने के बाद मैं इस त्रुटि के पार आया:

त्रुटि: संबंध 'तालिका' के लिए अनुमति से इनकार

एक और अनुमति गायब है:

GRANT SELECT ON ALL SEQUENCES IN SCHEMA mySchema TO myReadonlyUser

इस अनुमति को जोड़ने से मुझे अपने रीड-ओनली उपयोगकर्ता के साथ बैकअप करने में सक्षम बनाया गया।


2

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


बस ब्लॉग पोस्ट को लिंक करने के बजाय, आपको अपने जवाब में लिंक-रोट ( en.wikipedia.org/wiki/Link_rot देखें )
मैक्स वर्नोन

ब्लॉगपोस्ट से मूल विचार है ALTER USER set default_transaction_read_only = on;, जो उपयोगकर्ता को इसे बदलने से नहीं रोकता है।
ब्लू

Ewww। बैकअप के लिए एक सुपरयुसर? उन्होंने विशेष रूप से केवल पढ़ने के लिए कहा। वह उपयोगकर्ता एक सेट सत्र वर्णक्रम है, जैसा कि ट्रांसपोर्टेशन रीड राइट या ALTER USER बैकडैम सेट default_transaction_read_only = off; डेटाबेस में अप्रतिबंधित पहुंच रखने से दूर।
इवान कैरोल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.