web-dev-qa-db-ja.com

AUTHORIZATIONのマルチユーザーを使用して、dbにpostgresスキーマを作成します

同じデータベースで複数のユーザーが所有またはアクセスできるスキーマを作成することはできますか?

読んでました postgres create schemaドキュメントとpostgres alter schemaドキュメント。1人以上のユーザーに提供する構文はありません。

私はまた、そのような解決策を単純または困難な方法で探していましたが、何も見つかりませんでした。

解決策またはそれを回避するための可能な方法を教えてください、またはそのようなことは決して不可能であると私に確信していただけませんか?

4
tymik

複数のユーザーが所有:いいえ
複数のユーザーがアクセス可能:はい

ユーザー(またはロール)にスキーマ内のテーブルへのアクセス権を付与するには、次のようなものを使用できます。

_grant all on schema foobar to role_name;
grant all on all tables in schema foobar to role_name;
grant all on all sequences in schema foobar to role_name;
grant all on all functions in schema foobar to role_name;
_

_grant all on schema_は、そのスキーマに対する2つの特権usageおよびcreateを付与します。 マニュアルを引用するには : "指定されたスキーマに含まれるオブジェクトへのアクセスを許可します(オブジェクト自体の特権要件も満たされていることを前提とします。)基本的に、これにより、権限受領者は「検索」できますスキーマ内のオブジェクト "。しかし、これはテーブルからデータを選択する権限withinスキーマを付与しません。したがって、上記の4つのステートメントすべてが必要です。ユーザーに新しいオブジェクトを作成させたくない場合は、_grant usage on schema ..._を使用します。

これをロールに付与し、複数のユーザーに対してこれを行う必要がある場合は、そのロールを個々のユーザーに付与する方がおそらく簡単です。

新しく作成されたテーブル(または他のオブジェクト)に権限を拡張する場合は、スキーマのデフォルトの権限を変更する必要があります。

_alter default privileges in schema foobar grant all on tables to role_name;
alter default privileges in schema foobar grant all on sequences to role_name;
alter default privileges in schema foobar grant all on functions to to role_name;
alter default privileges in schema foobar grant all on types to role_name;
_

自動コミットモードで実行していない場合は、これらのステートメントをコミットすることを忘れないでください。

もちろん、これらのユーザーだけにaccessを許可する場合、オブジェクトはALLキーワードをSELECTまたは_SELECT,INSERT,UPDATE_に置き換えます(オブジェクトタイプと必要なものに応じて)それらを許可します。

オブジェクト名を完全に修飾する必要がないように、それらのユーザーにデフォルトのsearch_pathを設定することもできます(ユーザーがその単一のスキーマにアクセスするだけでよい場合)。