指定されたスキーマ内のすべての既存のテーブルに権限を設定するための省略形が見つかりました。マニュアルは明確にします:
(ただし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スクリプトをコピーするときは、手動で句を調整してください。