web-dev-qa-db-ja.com

PostGresテーブルのすべての権限を付与しましたが、挿入/選択しようとすると「アクセスが拒否されました」エラーが発生します

PostGres9.5を使用しています。作成したばかりのテーブルにデータを挿入できません。データベースユーザーにすべての権限を付与しているにもかかわらず、「権限が拒否されました」というエラーが発生します。下記参照 ...

localhost:myapp davea$ psql -Upostgres
Password for user postgres:
psql (9.5.0, server 9.5.1)
Type "help" for help.

postgres=# GRANT ALL ON schema public TO myapp;
GRANT

localhost:myapp davea$ psql -Upostgres
Password for user postgres:
psql (9.5.0, server 9.5.1)
Type "help" for help.

postgres=# GRANT USAGE ON schema public TO myapp;
GRANT
postgres=# \q
localhost:myapp davea$ myapp
psql (9.5.0, server 9.5.1)
Type "help" for help.

myapp=> insert into search_codes (id, code, address_id) values (1, 'atlanta', 'GA');
ERROR:  permission denied for relation search_codes
myapp=> select * FROM search_codes;
ERROR:  permission denied for relation search_codes
myapp=> \d search_codes;
                                Table "public.search_codes"
   Column   |       Type        |                         Modifiers
------------+-------------------+-----------------------------------------------------------
 id         | integer           | not null default nextval('search_codes_id_seq'::regclass)
 code       | character varying |
 address_id | character varying |
Indexes:
    "search_codes_pkey" PRIMARY KEY, btree (id)
    "index_search_codes_on_code" UNIQUE, btree (code)
    "index_search_codes_on_address_id" btree (address_id)

ユーザーがテーブルから挿入して選択できるように特権を付与する適切な方法は何ですか?

6
Dave

最初のコマンドは、テーブルを一覧表示する機能を提供します(既存のものがあることを知ることができます)

GRANT USAGE ON SCHEMA public TO myapp

次に、スキーマパブリック内のすべてのテーブルにSELECT、INSERTなどを付与する必要があります

GRANT SELECT, UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA public TO myapp

特定のアプリにすべての権限を付与しないことをお勧めします。

シーケンスがある場合:

 GRANT SELECT, UPDATE, USAGE ON ALL SEQUENCES IN SCHEMA public to myapp

機能がある場合:

GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO myapp

その後、あなたの例が機能します。

ただし、将来作成されるテーブルにアクセスできるようにする場合は、コマンドを適用する必要があります。

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, UPDATE, INSERT, DELETE, TRIGGER ON TABLES TO myapp

Postgresqlには非常に奇妙なメカニズムがあり、理解するのに時間がかかりました。

9
Rémi Desgrange

Myappデータベースではなくpostgresデータベースで権限を付与しています。

最初のPSQLコマンドをに変更します

psql -Upostgres myapp

そして、助成金を発行します

2
Gary

最初に、postgresユーザーを使用して新しいデータベースにログインする必要があります

psql your_db_name -U postgres -h your_Host_name

テーブルを一覧表示する機能を提供します

GRANT USAGE ON SCHEMA public TO your_user_name

次に、スキーマパブリック内のすべてのテーブルにアクセス許可を付与する必要があります

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO your_user_name

シーケンスがある場合は許可を与えます

GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user_name
2

https://dba.stackexchange.com/questions/33943/granting-access-to-all-tables-for-a-user をご覧ください。

あなたの問題は、GRANTがデータベース、スキーマ、およびテーブルで異なるため、テーブルにアクセス許可を明示的に設定する必要があることだと思います。

1
Jared Sohn