GRANT USAGE特定のデータベースのユーザー/ロールにしたい。データベースには多くのスキーマがあります。
があることは知っていますがON ALL TABLES IN SCHEMA、「すべてのスキーマ」が必要です。試しましたがGRANT USAGE .. ON DATABASE、それは明らかに間違っています(実際には存在しません)。
これはPostgres 9.3または9.4用で、AWS RDS上にあるサーバーです。
GRANT USAGE特定のデータベースのユーザー/ロールにしたい。データベースには多くのスキーマがあります。
があることは知っていますがON ALL TABLES IN SCHEMA、「すべてのスキーマ」が必要です。試しましたがGRANT USAGE .. ON DATABASE、それは明らかに間違っています(実際には存在しません)。
これはPostgres 9.3または9.4用で、AWS RDS上にあるサーバーです。
回答:
少なくとも2つのオプションがあります。
最初のものは、小さなクエリとテキストエディタを使用します。関心のあるスキーマを収集する必要があります。
SELECT nspname
FROM pg_namespace;
WHEREスコープを制限する場合は、句を追加できます。出力をコピーして修正し、多くのGRANT USAGE ON SCHEMA ... TO your_role;コマンドを取得します。次にpsql、たとえばにフィードします。
psql -f multigrant.sql
これの通常の変形は、収集された名前と呼び出しをループしpsql、構築されたGRANTステートメントを-cオプションに渡すシェルスクリプトです。
もう 1つのソリューションは、1つのpl / pgsqlブロックで基本的に同じことを行い、動的クエリを構築します。コアは同じです-スキーマを収集する必要があります。次に、それらすべてをループし、スキーマごとにパーミッションスキーマを付与します。
DO $do$
DECLARE
sch text;
BEGIN
FOR sch IN SELECT nspname FROM pg_namespace
LOOP
EXECUTE format($$ GRANT USAGE ON SCHEMA %I TO your_role $$, sch);
END LOOP;
END;
$do$;
注:
format()に、%I書式指定子を使用します。このアプローチは、文字列定数といくつかのquote_ident()呼び出しを連結してクエリを作成するよりもはるかに読みやすくなっています。pg_namespacepg_catalogスキーマにあります。そこにある他のオブジェクトをチェックしてください-スキーマ、テーブルなどのあらゆる側面を保存します。あなたも使用できます。
DO $do$
DECLARE
sch text;
BEGIN
FOR sch IN SELECT nspname FROM pg_namespace where nspname != 'pg_toast'
and nspname != 'pg_temp_1' and nspname != 'pg_toast_temp_1'
and nspname != 'pg_statistic' and nspname != 'pg_catalog'
and nspname != 'information_schema'
LOOP
EXECUTE format($$ GRANT USAGE ON SCHEMA %I TO your_role $$, sch);
EXECUTE format($$ GRANT USAGE ON SCHEMA %I to your_role $$, sch);
EXECUTE format($$ GRANT SELECT ON ALL SEQUENCES IN SCHEMA %I TO your_role $$, sch);
EXECUTE format($$ GRANT SELECT ON ALL TABLES IN SCHEMA %I TO backup_user $$, sch);
EXECUTE format($$ ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT SELECT ON TABLES TO your_role $$, sch);
EXECUTE format($$ ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT SELECT ON SEQUENCES TO your_role $$, sch);
END LOOP;
END;
$do$;
grant usage新しいスキーマに対して自動的に実行されるイベントトリガーを使用して、新しく作成されたスキーマのデフォルトの権限をシミュレートできるかどうか疑問に思います。