मैं यह अनुदान भविष्य में भी नई तालिका निर्माण के लिए जारी रखना चाहता हूं।[...] मैंने प्रलेखन के माध्यम से ड्रेज किया है और मुझे एक उपयुक्त समाधान नहीं मिल रहा है।
क्योंकि 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');