পোস্টগ্রিসক্লিতে সমস্ত টেবিলের জন্য অনুদান নির্বাচন করুন


86

এমন কোনও ওলাইনার রয়েছে যা কোনও নতুন ব্যবহারকারীর পোস্টগ্রেস্কলকে SELECT অনুমতি দেয় ?

নিম্নলিখিত সিউডো-কোড বাস্তবায়ন করবে এমন কিছু:

GRANT SELECT ON TABLE * TO my_new_user;

উত্তর:


144

আমি ভেবেছিলাম এটি উল্লেখ করা সহায়ক হতে পারে যে, ৯.০ হিসাবে পোস্টগ্রিসের স্কিমে সমস্ত টেবিলের (পাশাপাশি অন্যান্য অবজেক্ট) সুবিধার্থে সিনট্যাক্স রয়েছে:

GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO user;

লিঙ্কটি এখানে ।


আমি শীঘ্রই আপগ্রেড করব, সুতরাং এটি সত্যিই ভাল খবর। ধন্যবাদ!
আদম মতান

এটি সার্ভারের সমস্ত ডেটাবেসগুলিকে প্রভাবিত করে যা পাবলিক স্কিমা ব্যবহার করে?
ক্রিশ্চিয়ানপ

5
যদি আমি একটি নতুন টেবিল তৈরি করি তবে এই ব্যবহারকারীর নতুন তৈরি টেবিলটিতে অ্যাক্সেস থাকবে?
গুইসিম

8
@ গুইসিম নং, আপনাকে default privilegesএকটি স্কিমা স্থাপন করতে হবে, যেখানে আপনি টেবিলটি তৈরি করবেন: postgresql.org/docs/current/static/…
স্কাইআরটি

@ ক্রিস্টিয়ানপ নো, পিজি ক্লাস্টারের প্রতিটি ডাটাবেসের নিজস্ব পাবলিক স্কিমা রয়েছে। এটি publicআপনার সাথে সংযুক্ত থাকা বর্তমান ডিবি এর স্কিমাতে সমস্ত সারণী (ফাংশন) প্রভাবিত করে।
SkyRaT

11

আমার (অ-এক-লাইনার) সমাধান:

#!/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

সুবিধাপ্রাপ্ত ব্যবহারকারী থেকে চালানো, এটি একটি কবজির মতো কাজ করেছে।


3
আপনি যদি all_tables এর পরিবর্তে pg_stat_user_tables ব্যবহার করেন তবে আপনার গ্রেপ লাগবে না ... এছাড়াও, বিন্যাসিত আউটপুট থেকে মুক্তি পেতে পিএসকিএল -A -t পাস করুন pass
ম্যাগনাস হাগান্ডার

1
নোট করুন যে Postgres 9.0 হিসাবে, এই উত্তরের পদ্ধতির এটি কঠোরভাবে করছে। 9.x এ, আমরা এখন এই অন্যান্য উত্তরে "সমস্ত সমস্ত" দেখলাম ।
তুলিল বাউরক

টেবিল বা স্কিমা নামগুলিতে বড় হাতের অক্ষর রয়েছে এমন এটি কাজ করে না। নীচে একটি সংশোধিত সংস্করণ যুক্ত করা হচ্ছে
এনিব

9

এটি একটি দ্বি-পদক্ষেপ প্রক্রিয়া সহ করা যেতে পারে।

  1. এই কোয়েরিটি চালান:

    select 'grant all on '||schemaname||'.'||tablename||' to $foo;'
    from pg_tables where schemaname in ('$bar', '$baz')
    order by schemaname, tablename;
    

    প্রতিস্থাপন:

    $foo= আপনি যে ব্যবহারকারী নামটির জন্য অনুমতি দিতে চান
    $bar, $baz= স্কিমার মধ্যে আপনি অনুমতি দিতে চান (কেবল "পাবলিক" হতে পারে)

  2. এটি আপনাকে প্রশ্নের একটি তালিকা দিতে যাচ্ছে যা প্রয়োজনীয় অনুমতিগুলি তৈরি করবে। আউটপুট অনুলিপি করুন, এটি অন্য ক্যোয়ারিতে পেস্ট করুন এবং সম্পাদন করুন।


2

এটি আমি ব্যবহার করেছি:

psql dbname -tc "select 'grant select on '||relname||' to readonly;' from pg_stat_user_tables" | psql dbname

আমি বোধ করি ফর্ম্যাটিং করা আরও বোধ করি এবং যেখানে বর্গক্ষেত্রে ক্লজ হয় ..


2

আমি এই কাজটি শেষ করেছি এবং এটি কার্যকর হয়েছে:

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
GRANT SELECT ON TABLES TO PUBLIC;

1

আমি পোস্টগ্রিজ ৮.৪ এর সাথে কাজ করছি এবং ব্যবহারকারীর সমস্ত সুযোগ-সুবিধা দেওয়ার জন্য নিম্নলিখিত কাজগুলি করছি:

#!/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

1
দয়া করে ইংরাজীতে
গড়িমসি করা

0

এটির সমাধানের একটি উপায় হ'ল একটি সঞ্চিত পদ্ধতি লিখুন। দুর্ভাগ্যক্রমে কোনও "সমস্ত টেবিলকে সমস্ত কিছুই মঞ্জুর করুন" আদেশ বা তেমন নেই। আপনার এই কাজটি করার জন্য আপনার সত্যিই একটি প্রক্রিয়া বা কিছু বাহ্যিক শেল স্ক্রিপ্ট দরকার।


0

অ্যাডাম মতান দ্বারা লিখিত (ওয়ান-লাইন সমাধান) স্ক্রিপ্টটি দুর্দান্ত যখন অনেকগুলি স্কিমা থাকে তবে স্কিমার নাম বা টেবিলের নামগুলিতে বড় হাতের অক্ষর বা বিশেষ অক্ষর রয়েছে এমনটি কার্যকর হয় না।

পরিবর্তিত সংস্করণ:

#!/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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.