এমন কোনও ওলাইনার রয়েছে যা কোনও নতুন ব্যবহারকারীর পোস্টগ্রেস্কলকে SELECT অনুমতি দেয় ?
নিম্নলিখিত সিউডো-কোড বাস্তবায়ন করবে এমন কিছু:
GRANT SELECT ON TABLE * TO my_new_user;
এমন কোনও ওলাইনার রয়েছে যা কোনও নতুন ব্যবহারকারীর পোস্টগ্রেস্কলকে SELECT অনুমতি দেয় ?
নিম্নলিখিত সিউডো-কোড বাস্তবায়ন করবে এমন কিছু:
GRANT SELECT ON TABLE * TO my_new_user;
উত্তর:
আমি ভেবেছিলাম এটি উল্লেখ করা সহায়ক হতে পারে যে, ৯.০ হিসাবে পোস্টগ্রিসের স্কিমে সমস্ত টেবিলের (পাশাপাশি অন্যান্য অবজেক্ট) সুবিধার্থে সিনট্যাক্স রয়েছে:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO user;
লিঙ্কটি এখানে ।
default privileges
একটি স্কিমা স্থাপন করতে হবে, যেখানে আপনি টেবিলটি তৈরি করবেন: postgresql.org/docs/current/static/…
public
আপনার সাথে সংযুক্ত থাকা বর্তমান ডিবি এর স্কিমাতে সমস্ত সারণী (ফাংশন) প্রভাবিত করে।
আমার (অ-এক-লাইনার) সমাধান:
#!/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
= স্কিমার মধ্যে আপনি অনুমতি দিতে চান (কেবল "পাবলিক" হতে পারে)
এটি আপনাকে প্রশ্নের একটি তালিকা দিতে যাচ্ছে যা প্রয়োজনীয় অনুমতিগুলি তৈরি করবে। আউটপুট অনুলিপি করুন, এটি অন্য ক্যোয়ারিতে পেস্ট করুন এবং সম্পাদন করুন।
আমি পোস্টগ্রিজ ৮.৪ এর সাথে কাজ করছি এবং ব্যবহারকারীর সমস্ত সুযোগ-সুবিধা দেওয়ার জন্য নিম্নলিখিত কাজগুলি করছি:
#!/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