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


12

मैंने psql में निम्न SQL चलाया है:

CREATE USER bspu LOGIN;

CREATE DATABASE bsp OWNER bspu;

GRANT ALL PRIVILEGES ON DATABASE bsp TO bspu;

\c bsp

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  client_id VARCHAR(20) NOT NULL,
  api_key VARCHAR(100) NOT NULL,
  api_secret VARCHAR(100) NOT NULL,
  auth_token VARCHAR(128) NOT NULL
);

जब मैं लॉगिन करता हूं bspu, और usersतालिका को क्वेरी करने का प्रयास करता हूं, तो मुझे त्रुटि मिलती है:

permission denied for relation users

मैंने दौड़ने की कोशिश की:

ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO bspu;

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

EDIT: मैंने bspuअभी के लिए सुपरयुसर में अपग्रेड किया, इसलिए मैं काम जारी रख सकता हूं। किसी भी अन्य मार्गदर्शन की सराहना की।


\dt "users"शो का आउटपुट क्या है ?
bma

@bma केवल मेरा मुख्य उच्चारण सूचीबद्ध है।
अगर __name__ कोई नहीं है

आपने आरंभिक आदेशों को किस उपयोगकर्ता के रूप में चलाया? आपको SELECT session_user, current_userअपनी स्क्रिप्ट के शीर्ष पर क्या मिलता है ? और आपका Postgres संस्करण क्या है?
एरविन ब्रान्डसेट्टर 0

यदि ये आपके द्वारा चलाए गए सटीक आदेश थे, तो आप अभी भी अपने 'मुख्य एसीसी' से जुड़े हुए हैं। तो यह नीचे आता है कि आपके पास क्या विशेषाधिकार हैं। अन्यथा, इरविन का उत्कृष्ट उत्तर देखें। (। मुझे स्वीकार करते हैं कि मैं यह गूंगा है कि इस त्रुटि संदेश नहीं बताता है जो भूमिका की अनुमति नहीं है उदाहरण के लिए, जब एक सुरक्षा Definer साथ कार्यों की श्रृंखला चलाता है, यह बहुत तेजी से भ्रमित हो जाता है कौन कौन है लगता है कि करते हैं।)
Dezso

जवाबों:


22

DEFAULT PRIVILEGESहै के लिए अनुमतियों को बदलने के मौजूदा वस्तुओं। वे नव निर्मित वस्तुओं के लिए डिफ़ॉल्ट विशेषाधिकार हैं और केवल उस विशेष भूमिका के लिए जो वे संबंधित हैं। यदि आप रनिंग करते समय भूमिका को परिभाषित नहीं करते हैं ALTER DEFAULT PRIVILEGES, तो यह वर्तमान भूमिका ( ALTER DEFAULT PRIVILEGESस्टेटमेंट निष्पादित करते समय) को डिफॉल्ट करता है।

इसके अलावा, जब से आप एक serialकॉलम का उपयोग कर रहे हैं , जो एक बनाता है SEQUENCE, तो आप दृश्यों के लिए डिफ़ॉल्ट विशेषाधिकार भी सेट करना चाहेंगे।

कमांड चलाने से पहले आप जिस ऑब्जेक्ट के साथ ऑब्जेक्ट बनाते हैं, उसे इस पर CREATEचलाएँ:

ALTER DEFAULT PRIVILEGES [ FOR ROLE my_create_role] GRANT ALL ON TABLES TO bspu;
ALTER DEFAULT PRIVILEGES [ FOR ROLE my_create_role] GRANT ALL ON SEQUENCES TO bspu;

यदि आपको pgAdmin का उपयोग करना चाहिए, तो सावधानी का एक शब्द। इसके विपरीत इंजन वाली SQL स्क्रिप्ट के प्रदर्शन में वर्तमान संस्करण 1.20 (या अधिक) में एक बग है DEFAULT PRIVILEGES। प्रदर्शन मालिक उपयोगकर्ता की उपेक्षा करता है और इसलिए कुछ स्थितियों में गलत है। मैंने बग की सूचना दी, मामला लंबित है

के लिए मौजूदा वस्तुओं आप भी इस "बैच" के रूप में दिलचस्पी हो सकती है GRANTआदेश :

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO bspu;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO bspu;

एसओ पर इस संबंधित प्रश्न के तहत अधिक:


1
बग pgAdmin4 में अभी भी बनी रहती उल्लेख किया है, को देखने के redmine.postgresql.org/issues/4685 , जिनमें से डुप्लिकेट के रूप में चिह्नित किया गया है redmine.postgresql.org/issues/4256
dpprdan

-1
This is working for me after some research. psql (9.6.12)

-- login to postgres database server as postgres user.
ssh <user>>@hostname.<domain>>.com
sudo su postgres
id
psql
postgres=# create user sentry_read with login password 'sentry_read';
postgres=# du+
postgres=# \l+
-- **very important: make sure we should connect required database before we grant to user.**
postgres=# \c sentry
postgres=# \dt
sentry=# \dp SENTRY_VERSION
sentry=# select * from "SENTRY_VERSION";
sentry=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO sentry_read;
postgres=# \q

[user@hostname ~]$ psql -U sentry_read -d sentry -h hostname.<domain>>.com -W
sentry=> select * from "SENTRY_VERSION";
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.