2012-05-08 7 views
18

すべてのファンクションおよびビューに対する任意のユーザーに対する読取り/選択アクセスをどのように許可しますか。ビューに対するすべての特権を任意のユーザーに付与する方法

は、私はいくつかの機能とビューを作成するためにpsql --user=postgres -d mydb -f myview.sqlを使用して、私が実行します。

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser; 

がすべての権限を付与されていたので、私は今postgres、ユーザーが作成した機能とビューへのアクセス権を持っているmyuserを期待します。しかし、myuserでアクセスしようとすると、「関係が拒否されました...」というエラーが表示されます。どうしてこれなの?

答えて

25

理由は、ビューまたはテーブルにアクセスするために追加の権限が必要なためです。データベースの特権には、その中のすべてのオブジェクトへのアクセスは含まれません。

機能によって異なります:EXECUTEデフォルトではpublicに特権が付与されます。 ただし、は、現在のユーザーの権限で実行されます。 CREATE FUNCTIONSECURITY DEFINER修飾語に興味があるかもしれません。しかし、通常は関係するテーブルにSELECTを与えるだけで十分です。オブジェクトの種類に応じて

Per documentation about default privileges:

、初期のデフォルトの権限は PUBLICにいくつかの権限を付与するなどがあります。デフォルトでは、表、列、スキーマおよび表領域に対するパブリックなアクセスは、 です。 CONNECT 特権およびTEMPデータベースのテーブル作成特権。機能のためのEXECUTE 特権;言語の特権はUSAGEです。

あなたは(Postgresの9.0以降が必要です)このDDLコマンドに興味がある可能性があります(下記@marcel's commentを参照)

GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser; 

もちろんの問題のデータベースに接続している間、およびなど十分な特権を持つユーザー。また、設定DEFAULT PRIVILEGESに興味がある可能性があり:

どのように権限を管理するために、より詳細な回答:

pgAdminが機能を持っていますfまたは、より洗練された一括操作:

enter image description here

それとも、バルク付与/取り消しのためのDDL文を作成するために、システムカタログを照会することができます...

+2

「SCHEMAのすべてのタブレットを公開するには、myuserを許可してください。許可しているユーザーがそのデータベースに対して* CONNECTED *であるときにこのコマンドが実行された場合にのみ意味があります。そうでない場合は、何もしません(または少なくともユーザーに選択権限を与えない)。スーパーユーザーのシェルで\ c databasenameを使用します。 – marcel

+0

@marcel:人々に思い出させるためのメモを追加しました。 –

+0

これはユーザーにシーケンスへのアクセス許可を与えません。 – Cerin

関連する問題