उपयोगकर्ता के लिए सभी तालिकाओं तक पहुंच प्रदान करना


151

मैं पोस्टग्रेज के लिए नया हूं और हमारे MySQL डेटाबेस को स्थानांतरित करने की कोशिश कर रहा हूं। MySQL में मैं प्रदान कर सकते हैं SELECT, UPDATE, INSERT, और DELETEएक कम विशेषाधिकार प्राप्त उपयोगकर्ता के विशेषाधिकारों और एक निर्दिष्ट डेटाबेस में सभी तालिकाओं के लिए लागू करने के लिए उन अनुदान सक्षम करें। मुझे Postgres में कुछ याद आ रहा है क्योंकि ऐसा लगता है कि मुझे एक बार में प्रत्येक तालिका के लिए उन विशेषाधिकारों को देना होगा। कई डेटाबेस और प्रति डेटाबेस के सैकड़ों टेबल के साथ जो मैदान से दूर जाने के लिए एक चुनौतीपूर्ण काम की तरह लगता है। इसके अलावा, डेटाबेस के संचालन में एक बार, तालिकाओं को जोड़ने से अक्सर ऐसा होता है कि मैं हर बार अनुमति देना नहीं चाहता, जब तक कि बिल्कुल आवश्यक न हो।

यह कैसे पूरा किया जाता है?

जवाबों:


175

सबसे पहले, आपको प्रश्नों को चलाने के लिए डेटाबेस से कनेक्ट करने में सक्षम होना चाहिए। इससे हासिल किया जा सकता है

REVOKE CONNECT ON DATABASE your_database FROM PUBLIC;

GRANT CONNECT
ON DATABASE database_name 
TO user_name;

REVOKEआवश्यक है क्योंकि

PUBLIC शब्द मुख्य संकेत देता है कि विशेषाधिकार सभी भूमिकाओं को दिए जाने हैं, जिनमें वे भी शामिल हैं जिन्हें बाद में बनाया जा सकता है। सार्वजनिक रूप से एक परिभाषित परिभाषित समूह के रूप में सोचा जा सकता है जिसमें हमेशा सभी भूमिकाएं शामिल होती हैं। किसी विशेष भूमिका में विशेषाधिकारों की राशि सीधे दी जाएगी, विशेष रूप से किसी भी भूमिका के लिए दी गई विशेषाधिकार विशेष रूप से और PUBLIC को दिए गए विशेषाधिकार हैं।

यदि आप वास्तव में अपने उपयोगकर्ता को डीएमएल बयानों तक सीमित करना चाहते हैं, तो आपके पास करने के लिए थोड़ा और है:

REVOKE ALL
ON ALL TABLES IN SCHEMA public 
FROM PUBLIC;

GRANT SELECT, INSERT, UPDATE, DELETE
ON ALL TABLES IN SCHEMA public 
TO user_name;

ये मानते हैं कि आपके पास केवल एक स्कीमा होगा (जिसे डिफ़ॉल्ट रूप से 'सार्वजनिक' नाम दिया गया है)।

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

ALTER DEFAULT PRIVILEGES 
    FOR ROLE some_role   -- Alternatively "FOR USER"
    IN SCHEMA public
    GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO user_name;

यहां, some_roleएक भूमिका है जो तालिकाओं का निर्माण करती है, जबकि user_nameएक है जिसे विशेषाधिकार प्राप्त होता है। इसे परिभाषित करते हुए, आपको इसके some_roleसदस्य या सदस्य के रूप में लॉग इन करना होगा।

और, अंत में, आपको दृश्यों के लिए भी ऐसा ही करना होगा (इसे इंगित करने के लिए प्लेडफ़ैन के लिए धन्यवाद) - यहां यह USAGEविशेषाधिकार है जो आपको चाहिए।


1
धन्यवाद, FOR some_roleवह महत्वपूर्ण हिस्सा था जिसे मैं बाद में बनाए गए अपने टेबल के लिए काम करने के लिए याद कर रहा था। लेकिन मुझे इसमें लॉग इन करने की आवश्यकता नहीं थी some_role, अगर मैंने डिफ़ॉल्ट व्यवस्थापक postgresउपयोगकर्ता के रूप में क्वेरी को निष्पादित किया तो यह भी काम किया ।
जस्टमार्टिन

54

यह मानते हुए कि आप उन्हें सभी विशेषाधिकार देना चाहते हैं - यह करें:

grant all privileges on database dbname to dbuser;

dbnameआपके डेटाबेस का नाम कहां है और dbuserउपयोगकर्ता का नाम है।


44
इस पर निम्न विशेषाधिकार जोड़ देगा डेटाबेस : CREATE, CONNECT, TEMPORARY। तालिकाओं पर कोई विशेषाधिकार नहीं।
डेज़ो

13
सभी तालिकाओं के लिए एक समान कमान होगी,GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO dbuser;
डोलन एंटेनुची

5
मुझे यह भी उपयोगी लगा:GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO dbuser;
पाओलो

18

डेटाबेस के भीतर सभी तालिकाओं को सभी विशेषाधिकार प्रदान करने के साथ प्राप्त किया जाता है

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema_name> TO <username>;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA <schema_name> TO <username>;

15

यह हो सकता है कि मैं यहाँ कुछ गलत कर रहा था क्योंकि मैं PostgreSQL के लिए बहुत नया हूँ। लेकिन इससे मेरे लिए समस्या का पहला भाग हल हो गया - सभी मौजूदा तालिकाओं पर विशेषाधिकार स्थापित करना।

नई टेबलों पर अपने उपयोगकर्ता के लिए सही तरीके से सेट की जाने वाली अनुमतियों के लिए, मुझे बनाया गया है कि मुझे उपयोगकर्ता के लिए डिफ़ॉल्ट अनुमतियां सेट करनी होंगी:

ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, INSERT, UPDATE, DELETE ON tables TO user_name;

ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, USAGE ON sequences TO user_name;

2
--Create User

CREATE USER my_user_test WITH LOGIN NOSUPERUSER NOCREATEDB  NOCREATEROLE    INHERIT NOREPLICATION   CONNECTION LIMIT -1 PASSWORD 'xxxxxxx';

-- Grant connect to my data base

GRANT CONNECT ON DATABASE my_db_test TO my_user_test;

-- Grant usage the schema

GRANT USAGE ON SCHEMA my_sch_test TO my_user_test ;

-- Grant all table for SELECT, INSERT, UPDATE, DELETE

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA my_sch_test TO my_user_test;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.