প্রশ্ন GRGANT postgresql সব টেবিল নির্বাচন করুন


সেখানে একটি এক-মাছ ধরার নৌকা যে অনুদান আছে অনুমতি নির্বাচন করুন একটি নতুন ব্যবহারকারী PostgreSQL?

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

GRANT SELECT ON TABLE * TO my_new_user;

78
2017-08-30 14:11


উত্স




উত্তর:


আমি মনে করি এটি উল্লেখযোগ্য হতে পারে যে, 9.0 হিসাবে, পোস্টগ্রেসের স্কিমাতে সমস্ত টেবিলের (এবং অন্যান্য বস্তুর) বিশেষাধিকার দেওয়ার জন্য সিনট্যাক্স রয়েছে:

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

এখানে লিংকটি


132
2018-06-26 14:00



আমি শীঘ্রই আপগ্রেড করব, তাই এই সত্যিই ভাল খবর। ধন্যবাদ! - Adam Matan
এই সার্বজনীন স্কিমা ব্যবহার করে সার্ভারে সমস্ত ডেটাবেস প্রভাবিত করে? - kristianp
যদি আমি একটি নতুন টেবিল তৈরি করি তবে এই ব্যবহারকারীর কি নতুন তৈরি টেবিলের অ্যাক্সেস থাকবে? - GuiSim
@ গুইসিম নং, আপনাকে সেট করতে হবে default privileges একটি স্কিমা, যেখানে আপনি টেবিল তৈরি: postgresql.org/docs/current/static/... - SkyRaT
@ kristianp না, পি জি ক্লাস্টারে প্রতিটি ডাটাবেস নিজস্ব পাবলিক স্কিমা রয়েছে। এটি স্কিমাতে সমস্ত টেবিল (ফাংশন) প্রভাবিত করে public বর্তমান ডিবি জন্য আপনি সংযুক্ত করা হয়। - SkyRaT


আমার (অ-এক-মাছ ধরার নৌকা) সমাধান:

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

বিশেষাধিকার ব্যবহারকারী থেকে চালানো, এটি একটি কবজ মত কাজ।


11
2018-06-01 06:29



যদি আপনি all_tables এর পরিবর্তে pg_stat_user_tables ব্যবহার করেন, তবে আপনার grep প্রয়োজন হবে না ... এছাড়াও, ফর্ম্যাটযুক্ত আউটপুট পরিত্রাণ পেতে psql এ পাস করুন। - Magnus Hagander
উল্লেখ্য যে পোস্টগ্রেস 9.0 হিসাবে, এই উত্তরটির পদ্ধতিটি এটি হার্ড উপায় করছে। 9.x ইন, আমরা এখন দেখা "সব" আছে এই অন্যান্য উত্তর। - Basil Bourque


এটি একটি দুই ধাপে প্রক্রিয়া সম্পন্ন করা যাবে।

  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. এটি আপনাকে এমন প্রশ্নগুলির একটি তালিকা দেবে যা প্রয়োজনীয় অনুমতিগুলি তৈরি করবে। আউটপুট অনুলিপি করুন, এটি অন্য কোয়েরিতে পেস্ট করুন, এবং চালান।


8
2017-08-05 13:25





এই আমি কি ব্যবহার করা হয়:

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

আমি মনে করি এটি বিন্যাসে এবং যেখানে-সেক্যুলার মধ্যে clauses আরো প্রাকৃতিক।


2
2017-11-30 00:38





আমি postgres 8.4 সঙ্গে কাজ করছি এবং একটি ব্যবহারকারীকে সব সুবিধা দিতে নিম্নলিখিত কাজ করে:

#!/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
2018-04-05 18:04



ইংরেজি দয়া করে। - Linger


এই ঠিক করার এক উপায় একটি সংরক্ষিত পদ্ধতি লিখতে হয়। দুর্ভাগ্যবশত কোন কমান্ড বা "সব টেবিলে সবকিছু অনুদান" নেই। আপনি সম্ভবত এই কাজ করতে একটি পদ্ধতি বা কিছু বহিরাগত শেল স্ক্রিপ্ট প্রয়োজন।


0
2017-07-03 18:20





আমি শেষ পর্যন্ত শেষ এই, এবং এটা কাজ করে:

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

0