web-dev-qa-db-ja.com

PostgreSQL-「パブリック」の役割は誰または何ですか?

public列にgranteeが表示されたときにinformation_schema.role_table_grantsを見ていたところ、information_schema.enabled_rolesで確認しましたが、このrole_nameは存在しません。

=> publicロールは誰または何ですか?

11
Gugelhupf

マニュアルから:

キーワードPUBLICは、後で作成される可能性のあるロールを含め、すべてのロールに特権が付与されることを示しています。 PUBLICは、常にすべてのロールを含む暗黙的に定義されたグループと考えることができます。特定のロールには、直接付与された特権、現在メンバーとなっているロールに付与された特権、およびPUBLICに付与された特権の合計があります。

これは事実ですが、全体像ではありません。パブリックは、他のロールが属する暗黙的なロールとしても機能し、継承されると常に反映および報告されるわけではない独自の権限があります。

デフォルトでは、パブリックスキーマに対する作成権限が付与されます。これを削除しないと、読み取り専用ユーザーを作成するための他のすべての正しい手順により、そのユーザーもパブリックスキーマに新しいオブジェクトを作成できるようになり、所有権によりデータをそこに配置できます。これを防ぐには

REVOKE ALL ON SCHEMA public FROM PUBLIC;

同様に、データベースレベルで使用を削除する権限も付与します

REVOKE ALL ON DATABASE all_database FROM PUBLIC;

ここに良い記事: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf

7
Ruan Malan N