2012-02-17 12 views
103

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

create table cities (
id serial primary key, 
name text not null 
); 

create table reports (
id serial primary key, 
cityid integer not null references cities(id), 
reportdate date not null, 
reporttext text not null 
); 

create user www with password 'www'; 

grant select on cities to www; 
grant insert on cities to www; 
grant delete on cities to www; 

grant select on reports to www; 
grant insert on reports to www; 
grant delete on reports to www; 

grant select on cities_id_seq to www; 
grant insert on cities_id_seq to www; 
grant delete on cities_id_seq to www; 

grant select on reports_id_seq to www; 
grant insert on reports_id_seq to www; 
grant delete on reports_id_seq to www; 

है, तो उपयोगकर्ता www, करने की कोशिश कर के रूप में:

insert into cities (name) values ('London'); 

मैं मिल निम्न त्रुटि:

ERROR: permission denied for sequence cities_id_seq 

मुझे लगता है कि मिल समस्या सीरियल प्रकार के साथ निहित है। यही कारण है कि मैं * _id_seq www के लिए अधिकारों का चयन, सम्मिलित और हटा देता हूं। फिर भी यह मेरी समस्या को ठीक नहीं करता है। मैं क्या खो रहा हूँ? दृश्यों के लिए, इस विशेषाधिकार currval और nextval कार्यों के उपयोग की अनुमति देता -

GRANT USAGE, SELECT ON SEQUENCE cities_id_seq TO www; 

GRANT उपयोग:

+1

अनुक्रम पर सम्मिलित/हटाएं मुझे समझ में नहीं आता है। मुझे आश्चर्य है कि यह भी काम करता है। –

उत्तर

183

PostgreSQL 8.2 के बाद से आप का उपयोग करने के लिए है।

इसके अलावा

के रूप में टिप्पणी में @epic_fil से कहा तुम्हारे साथ स्कीमा में सभी दृश्यों को अनुमति प्रदान कर सकते हैं:

GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO www; 
+0

धन्यवाद। यह एक काम किया। बस सोच रहा हूं कि जिस तरह से मैं इन दो तालिकाओं के अधिकार प्रदान कर रहा हूं वह मानक है या कहीं कहीं अधिक स्वीकार्य मानक है। पंक्तियों को जोड़ने, संपादित करने और हटाने में सक्षम होने के लिए मुझे बस www की आवश्यकता है। – Vampnik

+0

@Vampnik: उस स्थिति में आपको सभी तालिकाओं में अद्यतन जोड़ने की आवश्यकता है। अनुक्रमों के लिए 'उपयोग, चयन' पर्याप्त होना चाहिए। –

+0

@ एएच। आखिरी के लिए धन्यवाद। बस बाद वाले खुद को भी खोजा। – Vampnik

53

के बाद से @Phil एक टिप्पणी upvotes का एक बहुत जो देखा नहीं मिल सकता है हो रही है , मैं एक जवाब है कि एक स्कीमा में सभी दृश्यों के लिए एक उपयोगकर्ता के लिए अनुमतियां मिल जाएंगी जोड़ने के लिए अपने वाक्य रचना का उपयोग कर रहा

GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public to www; 
+2

ध्यान दें कि यह केवल पोस्टग्रेएसक्यूएल 9.0 और ऊपर में काम करता है, इसे 8 में पूरा करने के लिए आप कुछ ऐसा कर सकते हैं: 'अनुदान उपयोग करें, चुनें' || quote_ident (schemaname) || '।' || quote_ident (relname) || 'Www;' Pg_statio_all_sequences से schemaname = 'public'; - 2 दिन पहले टॉम Gerken –

21

@Tom_Gerken, @epic_fil और @kupson (अपने स्कीमा संभालने डिफ़ॉल्ट 'सार्वजनिक' है) एक्सी के साथ काम करने की अनुमति देने के लिए उनके बयान के साथ काफी सही हैं स्टिंग अनुक्रम। हालांकि, उपयोगकर्ता को भविष्य में बनाए गए अनुक्रमों तक पहुंच अधिकार नहीं मिलेगा। ऐसा करने के लिए, तुम इतनी तरह, एक ALTER डिफ़ॉल्ट विशेषाधिकार बयान के साथ GRANT बयान गठबंधन करने के लिए है:

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

PostgreSQL 9+ पर यह केवल काम करता है, निश्चित रूप से।

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

संबंधित मुद्दे