שאלה בחר מענק לכל הטבלאות ב- postgresql


האם יש אחד אניה המעניק הרשאות SELECT כדי משתמש חדש postgresql?

משהו שיישם את הקוד הדומה הבא:

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 על סכימה, שבו ytou ליצור את הטבלה: 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 שלך ... כמו כן, לעבור -A כדי psql להיפטר פלט מעוצב. - Magnus Hagander
שים לב כי החל Postgres 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

אני מרגיש שזה טבעי יותר לעשות עיצוב ואיפה - סעיפים ב 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