指定されたスキーマ内の既存のすべてのテーブルに特権を設定する省略形を見つけました。マニュアルは次のことを明確にしています。
(ただし、ビューと外部テーブルALL TABLES
を含むと見なされることに注意してください)。
大胆強調鉱山。列は、列のデフォルトとしてシーケンスでserial
実装され、マニュアルを引用します:nextval()
シーケンスの場合、この権限によりcurrval
およびnextval
関数を使用できます。
したがって、列がある場合は、シーケンスserial
にも付与USAGE
(またはALL PRIVILEGES
)する必要があります
GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;
注: Postgres 10 以降のID 列は、追加の特権を必要としない暗黙的なシーケンスを使用します。serial
(列のアップグレードを検討してください。)
新しいオブジェクトはどうですか?
DEFAULT PRIVILEGES
ユーザーまたはスキーマについても興味があります。
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;
これにより、将来作成されるオブジェクトに自動的に権限が設定されますが、既存のオブジェクトには設定されません。
デフォルトの権限は、対象ユーザー ( ) によって作成されたオブジェクトにのみFOR ROLE my_creating_role
適用されます。その句を省略すると、デフォルトで現在実行中のユーザーになりますALTER DEFAULT PRIVILEGES
。明確にするために:
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;
また、pgAdmin III のすべてのバージョンには微妙なバグがあり、現在の役割に適用されない場合でも、SQL ペインにデフォルトの権限が表示されることに注意してください。FOR ROLE
SQL スクリプトをコピーするときは、句を手動で調整してください。