また、この助成金を今後も新しいテーブルの作成のために継続してほしいと思います。[...]ドキュメントを調べましたが、適切な解決策が見つからないようです。
9.0より前には何もありませんでした。取得できるのは、既存の権限を設定することだけです。 テーブル。 GRANT
を1つ実行する必要があります 9.0より前は「バルク」モードがなかったため、テーブルごとに。 8.4および9.0のSQL文法を参照してください:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] tablename [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
ここで9.0:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
新しいALL TABLES IN SCHEMA
一部はあなたが欠けているものです。
また、質問のようにデータベースレベルでアクセス許可を設定しても、役に立ちません。データベースにアクセス許可を「のみ」設定しますが、テーブルなどの「含まれている」ものには設定しません。関連するセクション:
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE dbname [, ...]
TO { [ GROUP ] rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]
つまり、設定できるのはCREATE
のみです。 、CONNECT
およびTEMP
データベース自体に対する権限はありますが、SELECT
はありません 、INSERT
など
これまでのところ悪いものについて。 できること 次のことです:
-
ユーザーではなくロールに権限を付与することにより、権限管理の数を減らします。次に、個々のユーザーに役割を追加します。新しいテーブルを作成するときは、1つまたは2つの役割を調整するだけでよく、数百人のユーザーを調整する必要はありません。
-
システムカタログをクエリし、適切な
GRANT
を作成します コマンド。それらをファイルに保存し、そのファイルを実行します。これにより、起動が簡単になります。
このようなクエリは次のようになります。
select 'GRANT ALL ON ' || table_schema || '.' || table_name ||' to my_group;'
from information_schema.tables
where
table_type = 'BASE TABLE' and
table_schema not in ('pg_catalog', 'information_schema');