すべての機能とビューに対する読み取り/選択アクセスを任意のユーザーにどのように許可しますか?
私が使う psql --user=postgres -d mydb -f myview.sql
いくつかの関数とビューを作成し、実行します:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
すべての特権が付与されたので、myuser
がpostgres
ユーザーによって作成された関数とビューにアクセスできるようになると思います。ただし、myuser
を使用してそれらにアクセスしようとすると、「関係の許可が拒否されました...」エラーが表示されます。どうしてこれなの?
その理由は、ビューまたはテーブルにアクセスするには追加の特権が必要だからです。データベースに対する特権は、データベース内のすべてのオブジェクトへのアクセスをカバーしていません。
関数によって異なります:EXECUTE
特権は、デフォルトでpublic
に付与されます。 But関数は現在のユーザーの権限で実行されます。 SECURITY DEFINER
のCREATE FUNCTION
修飾子に興味があるかもしれません。ただし、通常は、関係するテーブルにSELECT
を付与するだけで十分です。
オブジェクトのタイプに応じて、初期のデフォルト権限には、
PUBLIC
への一部の権限の付与が含まれる場合があります。デフォルトでは、テーブル、列、スキーマ、およびテーブルスペースへのパブリックアクセスはありません。データベースのCONNECT
特権とTEMP
テーブル作成特権。関数のEXECUTE
特権。および言語のUSAGE
特権。
このDDLコマンドに興味があるかもしれません(Postgres9.0以降が必要です):
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
もちろん、問題のデータベースに接続している間(以下の @ marcelのコメント を参照)、および十分な権限を持つユーザーとして。 DEFAULT PRIVILEGES
の設定にも興味があるかもしれません:
特権を管理する方法の詳細な回答:
pgAdmin には、より洗練された一括操作のための機能があります。
または、システムカタログを照会して、一括付与/取り消し用のDDLステートメントを作成できます...