回答:
9.0の時点で、postgresにはスキーマ内のすべてのテーブル(および他のオブジェクト)に対する特権を付与する構文があることに言及するのが役立つと思いました。
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO user;
こちらがリンクです。
default privileges
ytouがテーブルを作成するスキーマにを設定する必要があります:postgresql.org/docs/current/static/…–
public
接続している現在のDB のスキーマ内のすべてのテーブル(関数)に影響します。
私の(非ライナー)ソリューション:
#!/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
特権ユーザーから実行すると、魔法のように機能しました。
これは、2段階のプロセスで実行できます。
このクエリを実行します。
select 'grant all on '||schemaname||'.'||tablename||' to $foo;'
from pg_tables where schemaname in ('$bar', '$baz')
order by schemaname, tablename;
代替品:
$foo
=パーミッションを付与したいユーザー名
$bar
、$baz
=パーミッションを付与したいスキーマ(「パブリック」でも可)
これにより、必要なアクセス許可を生成するクエリのリストが表示されます。出力をコピーし、別のクエリに貼り付けて実行します。
私は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つの方法は、ストアドプロシージャを記述することです。残念ながら、「すべてのテーブルにすべてを付与する」コマンドなどはありません。この手順を実行するには、おそらく手順または外部シェルスクリプトが必要です。
Adam Matanによる(ワンライナーソリューション)スクリプトは、多くのスキーマが存在する場合に最適ですが、スキーマ名またはテーブル名に大文字または特殊文字が含まれる場合は機能しません。
変更されたバージョン:
#!/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