1. ホーム
  2. postgresql

[解決済み] PostgreSQLでグループロールにデータベース内の特定のスキーマをすべて許可する。

2022-10-29 08:38:48

質問

PostgreSQL 9.0 を使用して、"staff" というグループロールを持っており、特定のスキーマ内のテーブルのすべて(または特定の)権限をこのロールに付与したいと考えています。以下のいずれも動作しません。

GRANT ALL ON SCHEMA foo TO staff;
GRANT ALL ON DATABASE mydb TO staff;

staff" のメンバーは、スキーマ "foo" 内の個々のテーブル、または (2番目のコマンドの場合) データベース内の任意のテーブルに対して SELECT または UPDATE を行うことがまだできない状態です。 ただし その特定のテーブルのすべてを許可します。

私やユーザーの生活を楽にするためにはどうしたらよいでしょうか。

アップデートしてください。 の助けを借りて解決しました。 serverfault.comの同様の質問 .

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo TO staff;

どのように解決するのですか?

あなたは、すべての 既存の テーブルの権限を設定する省略記法を見つけました。 マニュアルでは、以下のように明確にされています。 :

<ブロッククオート

(ただし ALL TABLES を含むとみなされます。 ビュー 外部テーブル ).

太字強調は私です。 serial のカラムが実装されています。 nextval() をカラムのデフォルトとしてシーケンス上に実装し はマニュアルを引用して :

<ブロッククオート

シーケンスの場合、この権限で currvalnextval という関数があります。

ということで、もし serial カラムがある場合、そのカラムに USAGE (または ALL PRIVILEGES ) の上に シーケンス

GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

注意 アイデンティティ・カラム は暗黙的なシーケンスを使用するため、追加特権は必要ありません(Postgres 10以降ではアップグレードを検討してください)。(アップグレードを検討する 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 節を手動で調整してください。