PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL 8.4 भूमिका के लिए सभी तालिकाओं पर DML विशेषाधिकार प्रदान करता है

<ब्लॉककोट>

मैं यह अनुदान भविष्य में भी नई तालिका निर्माण के लिए जारी रखना चाहता हूं।[...] मैंने प्रलेखन के माध्यम से ड्रेज किया है और मुझे एक उपयुक्त समाधान नहीं मिल रहा है।

क्योंकि 9.0 से पहले कोई नहीं है। आप केवल मौजूदा . के लिए अनुमतियां सेट कर सकते हैं टेबल। आपको एक GRANT करना होगा प्रत्येक तालिका के लिए, क्योंकि 9.0 से पहले कोई "थोक" मोड नहीं था। 8.4 और 9.0 के लिए SQL ग्रामर देखें:

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [,...] | ALL [ PRIVILEGES ] }
    ON [ TABLE ] tablename [, ...]
    TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]

और यहां 9.0:

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [,...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...]
         | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

नया ALL TABLES IN SCHEMA वह हिस्सा है जिसे आप याद कर रहे हैं।

साथ ही:डेटाबेस स्तर पर अनुमतियां सेट करना आपके प्रश्न में आपकी सहायता नहीं करेगा:आप "केवल" डेटाबेस पर अनुमतियां सेट करेंगे, लेकिन टेबल जैसी किसी भी "निहित" सामग्री पर नहीं। प्रासंगिक अनुभाग:

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE dbname [, ...]
    TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]

जिसका अर्थ है कि आप केवल CREATE सेट कर सकते हैं , CONNECT और TEMP डेटाबेस पर ही अनुमतियाँ लेकिन कोई SELECT , INSERT आदि.

खराब सामान के लिए अब तक। आप क्या कर सकते हैं निम्नलिखित चीजें हैं:

  • उपयोगकर्ताओं को नहीं बल्कि भूमिकाओं को अधिकार देकर अनुमति प्रबंधन की संख्या कम करें। फिर अलग-अलग उपयोगकर्ताओं के लिए भूमिकाएँ जोड़ें। जब एक नई तालिका बनाई जाती है तो आपको केवल एक या दो भूमिकाओं को समायोजित करने की आवश्यकता होती है, लेकिन सैकड़ों उपयोगकर्ताओं की नहीं।

  • सिस्टम कैटलॉग को क्वेरी करें और उपयुक्त GRANT बनाएं आदेश। उन्हें एक फ़ाइल में सहेजें और उस फ़ाइल को निष्पादित करें। यह आपको एक आसान स्टार्टअप देना चाहिए।

ऐसी क्वेरी कुछ इस तरह दिख सकती है:

select 'GRANT ALL ON ' || table_schema || '.' || table_name ||' to my_group;' 
from information_schema.tables 
where 
    table_type = 'BASE TABLE' and 
    table_schema not in ('pg_catalog', 'information_schema');


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लिनक्स पर एक्सएफएस की वापसी

  2. SSH टनल के माध्यम से PostgreSQL

  3. लगातार दोहराव/डुप्लिकेट की संख्या का आदेश दिया

  4. पोस्टग्रेज में जेनरेटेड वैल्यू

  5. PostgreSQL में डेटाबेस_नाम कमांड का उपयोग करें