संबंध के लिए अनुमति से इनकार किया


329

मैंने साधारण sql कमांड चलाने की कोशिश की:

select * from site_adzone;

और मुझे यह त्रुटि मिली

ERROR:  permission denied for relation site_adzone

यहां क्या समस्या हो सकती थी?

मैंने अन्य तालिकाओं के लिए भी चयन करने की कोशिश की और एक ही मुद्दा मिला। मैंने भी ऐसा करने की कोशिश की:

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

लेकिन मुझे यह प्रतिक्रिया कंसोल से मिली

WARNING:  no privileges were granted for "jerry"

क्या आपके पास कुछ विचार है जो गलत हो सकता है?


मुझे यकीन नहीं है कि मैं अनुमतियों को कैसे अपडेट करूं, इसलिए मैं DB
Boban

1
आपको आवश्यक विशेषाधिकार देने की आवश्यकता है: Postgresql.org/docs/current/static/ddl-priv.html और postgresql.org/docs/current/static/sql-grant.html
a_horse_with_no_name

2
एसओ में आपका स्वागत है! इस सवाल के लिए, आप dba.stackexchange.com पर अधिक मदद प्राप्त कर सकते हैं, हालांकि आपको बहुत से स्नाइड टिप्पणियां मिल सकती हैं :)
जारेड बेक

10
माफ़ कीजियेगा। यह दूसरा बहुत ही प्रोग्रामिंग से संबंधित पोस्टग्रैक्स्ल प्रश्न है जिसे मैंने आज रात बंद विषय के रूप में देखा है! पिछले एक के पास 67,000 विचार थे, यह एक 30,000 विचार थे। हमारे पास एक लोकप्रियता खंड होना चाहिए: विषय पर> 15,000 विचारों = के साथ कोई भी गैर-व्यक्तिपरक प्रश्न।
थियोडोर आर। स्मिथ

1
यह सवाल विषय नहीं है! हालाँकि, यह stackoverflow.com/questions/13497352/… का
गेहूं 20

जवाबों:


391

डेटाबेस पर अनुदान वह नहीं है जो आपको चाहिए। सीधे तालिकाओं पर दें।

डेटाबेस पर विशेषाधिकारों को प्रदान करना ज्यादातर कनेक्ट विशेषाधिकारों को देने या निरस्त करने के लिए उपयोग किया जाता है। यह आपको यह निर्दिष्ट करने की अनुमति देता है कि कौन डेटाबेस में सामान कर सकता है यदि उनके पास पर्याप्त अन्य अनुमतियाँ हैं।

आप इसके बजाय चाहते हैं:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

यह इस मुद्दे का ध्यान रखेगा।


7
इसे एक सुपरयुसर के रूप में चलाएं, जैसे पोस्टग्रैज।
क्रिस ट्रैवर्स

19
क्या यह किसी तरह शॉर्टकट हो सकता है? सभी जगहों पर सभी विशेषाधिकार प्राप्त करें?
शादुर

196
@ शूरुर जनता के लिए सभी योजनाओं पर स्कीमा जनता में सभी सार्वजनिक स्थानों पर;
रॉन ई

10
@RonE वर्तमान डेटाबेस के लिए प्रतिबंधित है, हालांकि?
शादुर

7
स्कीमा के लिए @zmiftah आपको उपयोगकर्ता के लिए SCHEMA nameSchema पर सभी PRIVILEGES की आवश्यकता है;
पियरोजी

241

सभी तालिकाओं पर अनुदान विशेषाधिकारों के लिए रॉन ई उत्तर पोस्ट करना क्योंकि यह दूसरों के लिए उपयोगी हो सकता है।

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

21
तुम भी के लिए एक समान आदेश पर अमल करने की आवश्यकता हो सकती ALL SEQUENCESहै और ALL FUNCTIONS
पिस्तोस

7
जो लोग सोच रहे थे उनके लिए: ALL TABLESइसमें विचार भी शामिल हैं, इसलिए कोई अलग ALL VIEWSआदेश नहीं है :-)
एंड्रे गेसर

74

पहले सही डेटाबेस से कनेक्ट करें , फिर चलाएं:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

4
सही डेटाबेस से जोड़ने के लिए धन्यवाद नहीं था मैं पहले कर रहा था!
9

15
सही डेटाबेस से कनेक्ट करने से भारी गिरावट आती है :)\connect databasename;
डेनिस माताफोनोव

3
इस। मैं सभी के साथ "पोस्टग्रेज" से जुड़ा था। धन्यवाद!
एंड्रयू जी।

2
हां डीबी से जुड़ने से फर्क
पड़ गया

44
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;

इस दिन मेरा दिन बचा!
anhtran

19

पहला और महत्वपूर्ण कदम आपके db से जुड़ा है:

psql -d yourDBName

2 चरण, विशेषाधिकार प्रदान करें

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;

18

स्कीमा उपयोग में सभी मौजूदा तालिकाओं को अनुमति देने के लिए:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>

डिफ़ॉल्ट अनुमतियाँ निर्दिष्ट करने के लिए जिन्हें भविष्य के तालिकाओं पर लागू किया जाएगा:

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> 
  GRANT <privileges> ON TABLES TO <role>;

जैसे

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;

यदि आप उपयोग करते हैं SERIALया BIGSERIALकॉलम करते हैं, तो आप शायद इसके लिए भी ऐसा ही करना चाहते हैं SEQUENCES, अन्यथा आपका INSERTविफल हो जाएगा ( पोस्टग्रेज 10IDENTITY उस समस्या से ग्रस्त नहीं है, और इसे SERIALप्रकारों पर अनुशंसित किया जाता है ), अर्थात

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;

अधिक विवरण और पुन: प्रयोज्य स्क्रिप्ट के लिए वेब ऐप के लिए PostgreSQL अनुमतियों के लिए मेरा उत्तर भी देखें ।

संदर्भ:

GRANT

फेरर डिविलयर्स


9

यह अक्सर तब होता है जब आप उपयोगकर्ता के पोस्टग्रेट्स के रूप में एक टेबल बनाते हैं और फिर इसे एक साधारण उपयोगकर्ता के रूप में एक्सेस करने का प्रयास करते हैं। इस स्थिति में उपयोगकर्ता को पोस्टग्रेज के रूप में लॉग इन करना और कमांड के साथ तालिका का स्वामित्व बदलना सबसे अच्छा है:

alter table <TABLE> owner to <USER>;

5

सुनिश्चित करें कि आप टेबल के मालिक के रूप में psql में लॉग इन करते हैं। यह पता लगाने के लिए कि कौन टेबल का उपयोग करता है\dt

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

तब आप GRANTS चला सकते हैं


0

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

GRANT SELECT ON <table> TO <role>;

0

तुम्हे करना चाहिए:

  1. उपयोक्ता के साथ DBeaver के माध्यम से डेटाबेस से कनेक्ट करें
  2. बाएं टैब पर अपना डेटाबेस खोलें
  3. खुले टैब / ड्रॉपडाउन
  4. अपना उपयोगकर्ता चुनें
  5. दाएँ टैब पर 'अनुमतियाँ टैब' दबाएं
  6. अपना स्कीमा टैब दबाएँ
  7. प्रेस टेबल टैब / ड्रॉपडाउन
  8. सभी तालिकाओं का चयन करें
  9. सभी आवश्यक अनुमतियाँ चेकबॉक्स चुनें (या सभी को दबाएं)
  10. सहेजें दबाएं

-3

मुझे एक बार इस समस्या का सामना करना पड़ा था। बस डेटाबेस उपयोगकर्ता को सुपरयुसर में बदलें और आपकी समस्या हल हो गई है।

सुपरर के साथ माईस्टर का उपयोग करें;


ऐसा करने से आप जरूरत से ज्यादा प्रीमियर दे रहे हैं। सुपरयुसर उन्हें अन्य कार्यों के लिए अनुमति देगा जो आप उस उपयोगकर्ता को नहीं करना चाहते हैं, जैसे कि अन्य उपयोगकर्ता, डेटाबेस, आदि बनाना
Santi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.