डेटाबेस के मालिक के लिए विशेषाधिकार; अनुप्रयोग उपयोगकर्ता


15

त्वरित संस्करण:

इस डेटाबेस में तालिकाओं तक पहुँचने के लिए डेटाबेस स्वामी को सक्षम करने के लिए मुझे क्या आदेश जारी करना चाहिए और क्या यह उस स्वामी के खाते से किया जा सकता है?


लंबा संस्करण:

मैं आरडीएस पर एक डेटाबेस बना रहा हूं। मेरे पास एक 'रूट' उपयोगकर्ता है जिसे मैंने अमेज़ॅन के साथ कॉन्फ़िगर किया है।

अमेज़ॅन स्वचालित रूप से समूह भूमिका 'rds_superuser' बनाता है जो बहुत विशेषाधिकार प्राप्त है, लेकिन वास्तव में सुपरसुसर नहीं है।

मैं आवेदन के लिए एक डेटाबेस और उपयोगकर्ता इस प्रकार बना रहा हूं:

create database master_integration;
CREATE ROLE master_application LOGIN ENCRYPTED PASSWORD '...' VALID UNTIL 'infinity';
GRANT ALL ON DATABASE master_integration TO GROUP rds_superuser WITH GRANT OPTION;
GRANT ALL ON DATABASE master_integration TO GROUP master_application;

\c master_integration;
ALTER DEFAULT PRIVILEGES GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO rds_superuser;

मैंने इस स्क्रिप्ट को अपडेट किया कि क्रेग रिंगर द्वारा सुझावों को प्रतिबिंबित करने के बारे में कि मैं इसे कैसे संभालूं।

जब एप्लिकेशन कनेक्ट होता है (तो मास्टर_एप्पलिकेशन क्रेडेंशियल के साथ) यह टेबल बनाता है (और इसलिए मालिक है)।

मेरा मुद्दा यह है कि मैं प्रश्नों को चलाने के लिए अपने प्रशासनिक (मूल) लॉग इन का उपयोग नहीं कर सकता क्योंकि उपयोगकर्ता के पास तालिका में कोई विशेषाधिकार नहीं है।

मैं आवेदन पत्र से निम्नलिखित को चलाने से पहले इसे हल करने में सक्षम रहा हूं:

GRANT ALL privileges ON ALL TABLES IN SCHEMA public to rds_superuser;

लेकिन ऐसा लगता है कि किसी अधीनस्थ उपयोगकर्ता के अनुदान को निजी तौर पर किसी प्रशासनिक उपयोगकर्ता को वापस देना है।

तो ... क्या कोई ऐसा आदेश है जो मैं एप्लिकेशन से तालिकाओं को बनाने से पहले या बाद में चला सकता हूं जो यह सुनिश्चित करेगा कि डेटाबेस का मालिक डेटाबेस के भीतर तालिकाओं तक पहुंच सकता है?


डिफ़ॉल्ट विशेषाधिकार को फिर से आज़माने के बाद अपडेट करें ...

यह अभी भी तालिकाओं तक पहुंच प्रदान नहीं करता है; मैं देख रहा हूं कि इसे कहीं और सुझाया जा रहा है और यह पूरी तरह से समझ में आता है, लेकिन यह मेरे लिए काम नहीं कर रहा है। साइकल शेल से:

master_integration=> \ddp
                           Default access privileges
      Owner       | Schema | Type  |             Access privileges             
------------------+--------+-------+-------------------------------------------
 integration_root |        | table | integration_root=arwdDxt/integration_root+
                  |        |       | rds_superuser=arwdDxt/integration_root
(1 row)

master_integration=> \dp users
                           Access privileges
 Schema | Name  | Type  | Access privileges | Column access privileges 
--------+-------+-------+-------------------+--------------------------
 public | users | table |                   | 
(1 row)

एकीकरण_रोट मेरा सुपरयूजर-ईश उपयोगकर्ता है और उपयोगकर्ता मेरे डेटाबेस में एक तालिका है।


अपडेट करें

मुझे अमेज़न पर किसी से काफी बेकार प्रतिक्रिया मिली।

उन्होंने मुझसे मास्टर_एप्लीकेशन लॉगिन से ALTER DEFAULT PRIVILEGES पर कॉल करने के लिए कहा। हालांकि यह शायद काम करेगा, यह मेरे सवाल का जवाब नहीं देगा (जो है कि मैं इसे पूरी तरह से rds_superuser खाते से कैसे बना सकता हूं)।

मैंने उनसे इसे स्पष्ट करने के लिए कहा और वे चले गए।

जवाबों:


9

आप चाहते हैं ALTER DEFAULT PRIVILEGES

rds_superuserसभी नई तालिकाओं को डिफ़ॉल्ट एक्सेस अधिकार दें ।

यह केवल के बाद बनाई गई तालिकाओं को प्रभावित करता है ALTER। मौजूदा तालिकाओं के लिए आपको GRANTअधिकार होना चाहिए ।


मैंने ऐसा करने की कोशिश की थी। मैंने मूल प्रश्न में इसे खराब कहा, मैंने इसे ठीक उसी तरह से दिखाने के लिए संपादित किया है जिसे मैं निष्पादित कर रहा था। क्या मुझे कुछ गड़बड़ लगी?
एंडी डेविस

यह केवल के बाद बनाई गई तालिकाओं को प्रभावित करता है ALTER। आप इसे कब करेंगे? मौजूदा तालिकाओं के लिए आपको GRANTअधिकार होना चाहिए ।
क्रेग रिंगर

मैंने डिफ़ॉल्ट निजी को बदल दिया, फिर तालिकाओं का निर्माण किया। मैं इसे फिर से कोशिश करने जा रहा हूं, शायद मैंने गलती की।
एंडी डेविस

अभी भी इसके साथ कोई भाग्य नहीं है, हालांकि यह पूरी तरह से कमांड की तरह लगता है जो समस्या को हल करना चाहिए। मैंने एक टेबल से \ ddp और \ dp से आउटपुट को शामिल करने के लिए कमांड को अपडेट किया।
एंडी डेविस

अजीब तरह से। क्या आप एक नियमित (गैर-आरडीएस) पोस्टग्रेक्यूएल में समस्या को पुन: उत्पन्न कर सकते हैं?
क्रेग रिंगर

0

सार्वजनिक स्कीमा सभी उपयोगकर्ताओं द्वारा दिखाई जानी चाहिए। आपको सार्वजनिक स्कीमा के अधिकारों को केवल एक समूह तक सीमित नहीं रखना चाहिए।

इसलिए, यदि आप उपयोग नहीं करते हैं:

GRANT ALL ON SCHEMA public TO GROUP rds_superuser WITH GRANT OPTION;

आप सभी खातों के साथ सार्वजनिक स्कीमा के साथ सुरक्षित रूप से काम कर सकते हैं।

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

CREATE USER mywebuser WITH PASSWORD '*****';
REVOKE ALL PRIVILEGES ON SCHEMA public FROM mywebuser;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mywebuser; (or whatever rights you need to provide)

जैसा कि आप इसे करने की कोशिश करते हैं, वैसा दूसरा तरीका नहीं।


है ना? ए GRANTको कभी भी एक्सेस अधिकारों को कम करने में सक्षम नहीं होना चाहिए । मैं आश्वस्त नहीं हूं। ध्यान दें कि स्कीमा पर अधिकार उस स्कीमा में नई तालिकाओं से विरासत में नहीं मिलते हैं, या तो, इसलिए publicस्कीमा का उपयोग करने का मतलब यह नहीं है कि आप इसके भीतर तालिकाओं का उपयोग कर सकते हैं।
क्रेग रिंगर

मुझे आखिरकार यह प्रयास करना पड़ा और इससे स्थिति का पता नहीं चलता।
एंडी डेविस

मैंने उस ग्रांट को खत्म करने के लिए सवाल का संपादन किया है जिसका @Andndros जिक्र कर रहा था। यह समस्या प्रतीत नहीं हुई, लेकिन मुझे लगता है कि यह एक विकर्षण था।
एंडी डेविस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.