その理由は、ビューまたはテーブルにアクセスするには追加の特権が必要なためです。データベースの特権は、データベース内のすべてのオブジェクトへのアクセスをカバーしているわけではありません。
関数によって異なります:EXECUTE
public
に特権が付与されます デフォルトでは。 しかし 関数は、現在のユーザーの特権で実行されます。 SECURITY DEFINER
に興味があるかもしれません CREATE FUNCTION
の修飾子 。ただし、通常はSELECT
を付与するだけで十分です。 関係するテーブルで。
デフォルトの特権に関するドキュメントごと:
オブジェクトのタイプによっては、初期のデフォルトの権限に、
PUBLIC
にいくつかの権限を付与することが含まれる場合があります 。デフォルトでは、テーブル、列、スキーマ、およびテーブルスペースのパブリックアクセスはありません。CONNECT
特権とTEMP
データベースのテーブル作成特権。EXECUTE
機能の特権;およびUSAGE
言語の特権。
このDDLコマンドに興味があるかもしれません(Postgres 9.0が必要です 以降):
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
もちろん、問題のデータベースに接続している間(以下の@marcelのコメントを参照)、十分な権限を持つユーザーとして。 DEFAULT PRIVILEGES
の設定にも興味があるかもしれません :
- データベース内の特定のスキーマのすべてをPostgreSQLのグループロールに付与します
特権を管理する方法の詳細な回答:
- データベースとスキーマのユーザーのデフォルトの特権を管理するにはどうすればよいですか?
pgAdminには、より高度な一括操作のための機能があります:
または、システムカタログをクエリして、一括付与/取り消し用のDDLステートメントを作成することもできます...