web-dev-qa-db-ja.com

関係で許可が拒否されました

私は簡単なSQLコマンドを実行しようとしました:

select * from site_adzone;

そして私はこのエラーを得ました

ERROR:  permission denied for relation site_adzone

ここで何が問題だろうか?

私はまた他のテーブルのための選択をすることを試み、同じ問題を得た。私もこれをやろうとしました:

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

しかし、私はコンソールからこの応答を得ました

WARNING:  no privileges were granted for "jerry"

何が間違っている可能性があるかについて何か考えがありますか?

269
Boban

データベースに対するGRANTは、必要なものではありません。テーブルに直接付与します。

データベースに対する権限の付与は、主に接続権限を付与または取り消すために使用されます。これにより、他に十分な権限がある場合にデータベース内で誰がデータを処理できるかを指定できます。

代わりに欲しい:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

これでこの問題は解決します。

319
Chris Travers

Ron Eを投稿すると、他の人に役立つ可能性があるため、すべてのテーブルに対する付与特権について回答します。

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
199
sag

最初に正しいデータベースに接続します それから、次のコマンドを実行します。

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
53
user2757813
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;
21
Klanjabrik

スキーマ内のすべての既存のテーブルに権限を付与するには、次のコマンドを使用します。

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>

将来のテーブルに適用されるデフォルトの権限を指定するには、次のようにします。

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> 
  GRANT <privileges> ON TABLES TO <role>;

例えば.

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;

SERIALまたはBIGSERIALカラムを使用する場合、おそらくSEQUENCESに対しても同じことをしたくないでしょう。そうしないとINSERTは失敗するでしょう( Postgres 10のIDENTITY はその問題に悩まされず、SERIAL型よりも推奨されます)すなわち.

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;

詳細と再利用可能なスクリプトについては、「 Webアプリケーションに対するPostgreSQLのアクセス許可 」に対する私の回答も参照してください。

参照:

_付与_

デフォルトの権限の変更

16
isapir

1番目および 重要 ステップは、データベースに接続することです。

psql -d yourDBName

2ステップ、特権を付与

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;
11
zond

これは、ユーザpostgresとしてテーブルを作成し、それから一般ユーザとしてそれにアクセスしようとしたときによく起こります。この場合、postgresとして再度ログインし、ALTER TABLE OWNER TO someuserを使用してテーブルの所有権をテーブルを使用する予定のユーザに変更することをお勧めします。

4
Bruce

必ずテーブルの所有者としてpsqlにログインしてください。誰がテーブルを所有しているかを調べるには\dtを使います。

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

それならあなたはGRANTSを走らせることができます

4
Brian McCall