public
列にgrantee
が表示されたときにinformation_schema.role_table_grants
を見ていたところ、information_schema.enabled_roles
で確認しましたが、このrole_name
は存在しません。
=> public
ロールは誰または何ですか?
キーワード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