また、将来的に新しいテーブルを作成するためにも、この許可を保持したいと思います。[...] ドキュメントを調べてみましたが、適切な解決策が見つからないようです。
9.0より前は何もないからです。取得できるのは、既存のテーブルのアクセス許可を設定することだけです。GRANT
9.0 より前には「バルク」モードがなかったため、テーブルごとに1 つ実行する必要があります。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
これまでのところ、悪いことについてです。できることは、次のことです。
このようなクエリは次のようになります。
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');