web-dev-qa-db-ja.com

ビューのすべての権限を任意のユーザーに付与する方法

すべての機能とビューに対する読み取り/選択アクセスを任意のユーザーにどのように許可しますか?

私が使う psql --user=postgres -d mydb -f myview.sqlいくつかの関数とビューを作成し、実行します:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

すべての特権が付与されたので、myuserpostgresユーザーによって作成された関数とビューにアクセスできるようになると思います。ただし、myuserを使用してそれらにアクセスしようとすると、「関係の許可が拒否されました...」エラーが表示されます。どうしてこれなの?

23
Cerin

その理由は、ビューまたはテーブルにアクセスするには追加の特権が必要だからです。データベースに対する特権は、データベース内のすべてのオブジェクトへのアクセスをカバーしていません。

関数によって異なります:EXECUTE特権は、デフォルトでpublicに付与されます。 But関数は現在のユーザーの権限で実行されます。 SECURITY DEFINERCREATE FUNCTION修飾子に興味があるかもしれません。ただし、通常は、関係するテーブルにSELECTを付与するだけで十分です。

デフォルトの権限に関するドキュメントごと:

オブジェクトのタイプに応じて、初期のデフォルト権限には、PUBLICへの一部の権限の付与が含まれる場合があります。デフォルトでは、テーブル、列、スキーマ、およびテーブルスペースへのパブリックアクセスはありません。データベースのCONNECT特権とTEMPテーブル作成特権。関数のEXECUTE特権。および言語のUSAGE特権。

このDDLコマンドに興味があるかもしれません(Postgres9.0以降が必要です):

GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

もちろん、問題のデータベースに接続している間(以下の @ marcelのコメント を参照)、および十分な権限を持つユーザーとして。 DEFAULT PRIVILEGESの設定にも興味があるかもしれません:

特権を管理する方法の詳細な回答:

pgAdmin には、より洗練された一括操作のための機能があります。

enter image description here

または、システムカタログを照会して、一括付与/取り消し用のDDLステートメントを作成できます...

29