क्या कोई एक-लाइनर है जो एक नए उपयोगकर्ता के पोस्टग्रेजेल को SELECT परमिशन देता है ?
कुछ जो निम्नलिखित छद्म कोड को लागू करेगा:
GRANT SELECT ON TABLE * TO my_new_user;
क्या कोई एक-लाइनर है जो एक नए उपयोगकर्ता के पोस्टग्रेजेल को SELECT परमिशन देता है ?
कुछ जो निम्नलिखित छद्म कोड को लागू करेगा:
GRANT SELECT ON TABLE * TO my_new_user;
जवाबों:
मुझे लगा कि यह उल्लेख करना उपयोगी हो सकता है कि 9.0 के रूप में, पोस्टग्रेज में स्कीमा में सभी तालिकाओं (साथ ही अन्य वस्तुओं) पर विशेषाधिकार प्रदान करने के लिए वाक्यविन्यास है:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO user;
यहाँ लिंक है ।
default privileges
एक स्कीमा पर सेट करना होगा , जहां ytou तालिका बनाएं: postgresql.org/docs/current/static/…
public
आपके द्वारा कनेक्ट किए गए वर्तमान DB के स्कीमा में सभी तालिकाओं (फ़ंक्शन) को प्रभावित करता है।
मेरा (नॉन-वन-लाइनर) समाधान:
#!/bin/bash
for table in `echo "SELECT schemaname || '.' || relname FROM pg_stat_user_tables;" | psql -A -t my_database_name`;
do
echo "GRANT SELECT ON TABLE $table to my_new_user;"
echo "GRANT SELECT ON TABLE $table to my_new_user;" | psql my_database_name
done
विशेषाधिकार प्राप्त उपयोगकर्ता से भागो, यह एक आकर्षण की तरह काम करता था।
यह दो-चरणीय प्रक्रिया के साथ किया जा सकता है।
यह क्वेरी चलाएँ:
select 'grant all on '||schemaname||'.'||tablename||' to $foo;'
from pg_tables where schemaname in ('$bar', '$baz')
order by schemaname, tablename;
प्रतिस्थापन:
$foo
= उपयोगकर्ता नाम, जिसके लिए आप अनुमति देना चाहते हैं
$bar
, $baz
= आप जिस स्कीम में अनुमति देना चाहते हैं , वह (केवल "सार्वजनिक" हो सकती है)
यह आपको आवश्यक अनुमतियों को उत्पन्न करने वाले प्रश्नों की एक सूची देने जा रहा है। आउटपुट कॉपी करें, इसे किसी अन्य क्वेरी में पेस्ट करें, और निष्पादित करें।
मैं a. to पोस्टग्रेज के साथ काम कर रहा हूं और एक उपयोगकर्ता को सभी विशेषाधिकार देने के लिए निम्न कार्य करें:
#!/bin/bash
for table in `echo "SELECT schemaname||'.'||relname FROM pg_stat_all_tables WHERE schemaname NOT IN('pg_catalog','pg_toast','information_schema')" | psql -t db `;
do
echo "grant select on table $table to my_new_user;"
echo "grant select on table $table to my_new_user;" | psql db
done
इसे ठीक करने का एक तरीका संग्रहित प्रक्रिया लिखना है। दुर्भाग्य से "सभी टेबल के लिए सब कुछ अनुदान नहीं" आदेश या तो है। आपको वास्तव में इस कार्य को करने के लिए एक प्रक्रिया या कुछ बाहरी शेल स्क्रिप्ट की आवश्यकता होगी।
एडम मटन द्वारा स्क्रिप्ट (वन-लाइनर समाधान) बहुत बढ़िया है जब कई स्कीमा हैं, लेकिन यह काम नहीं करता है जहां स्कीमा के नाम या टेबल के नाम अपरकेस अक्षर या विशेष वर्ण होते हैं।
संशोधित संस्करन:
#!/bin/bash
for table in `echo "SELECT '\"' || schemaname || '\".\"' || relname || '\"' FROM pg_stat_user_tables;" | psql -A -t my_database_name`;
do
echo "GRANT SELECT ON TABLE $table to my_new_user;"
echo "GRANT SELECT ON TABLE $table to my_new_user;" | psql my_database_name
done