سؤال المنحة حدد لجميع الجداول في postgresql


هل هناك خط واحد الذي يمنح أذونات SELECT ل مستخدم جديد كيو؟

شيء من شأنه تنفيذ الشفرة الزائفة التالية:

GRANT SELECT ON TABLE * TO my_new_user;

78
2017-08-30 14:11


الأصل




الأجوبة:


اعتقدت أنه قد يكون من المفيد الإشارة إلى أنه اعتبارًا من 9.0 ، يحتوي postgres على بناء الجملة لمنح الامتيازات على كل الجداول (بالإضافة إلى الكائنات الأخرى) في المخطط:

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
GuiSim لا ، لديك لضبط default privileges على المخطط ، حيث يمكنك إنشاء الجدول: postgresql.org/docs/current/static/... - SkyRaT
kristianp لا ، تحتوي كل قاعدة بيانات في مجموعة PG على المخطط العام الخاص بها. يؤثر على جميع الجداول (وظائف) في المخطط public ل DB الحالي الذي أنت متصل به. - 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



إذا كنت تستخدم pg_stat_user_tables بدلاً من all_tables ، فأنت لا تحتاج إلى grep ... أيضًا ، قم بتمرير -At إلى psql للتخلص من الإخراج المنسق. - Magnus Hagander
لاحظ أنه اعتبارًا من Postgres 9.0 ، فإن طريقة الإجابة هذه تقوم بذلك بالطريقة الصعبة. في 9.x ، لدينا الآن "ON ALL" المنشورة في هذا الجواب الآخر. - 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

أشعر أنه من الطبيعي أكثر أن تفعل التنسيق وأين العبارات في SQL ..


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