外部サーバーのアクセス許可が拒否されました


8

私は、外部テーブルを作成できるように制限された権限を持つユーザーを設定しようとしています。2つのデータベースがhr_dbありaccounting_dbます。のhr_userユーザーhr_dbとのaccounting_userユーザーを作成しましたaccounting_dbaccounting_userユーザーにhr_dbusersテーブルなどの一部のテーブルに対する選択権限のみを付与したい。これを行うには、スーパーユーザーとしてhr_dbデータベースにアクセスして実行しました。

GRANT CONNECT ON DATABASE hr_db TO accounting_user;
GRANT SELECT ON people TO accounting_user;

私はへの接続を設定hr_dbからaccounting_db外国データラッパを使用しました:

CREATE SERVER hr_db FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'hr_db', port '5432');

次に、accounting_userユーザーのマッピングを追加しました。

CREATE USER MAPPING FOR accounting_user SERVER hr_db
OPTIONS (user 'accounting_user', password 'secretpassword');

のパスワードaccounting_userは、コマンドラインからのログインに使用するものと同じです。これはうまくいきます:

psql -U accounting_user -W hr_db
[enter accounting_user password]
SELECT * FROM people LIMIT 10;

ユーザーaccounting_dbとしてデータベースに通常のテーブルを作成できますaccounting_user

psql -U accounting_user -W accounting_db
[enter accounting_user password]
CREATE TABLE test (person_id integer NOT NULL);
DROP TABLE test;

しかし、外部テーブルを作成しようとすると:

CREATE FOREIGN TABLE hr_people (person_id integer NOT NULL)
SERVER hr_db OPTIONS (table_name 'people');
ERROR:  permission denied for foreign server hr_db

スーパーユーザーとして、hr_people外部テーブルを作成できます。外部テーブルにaccounting_userアクセスできます。したがって、外部データ接続hr_dbは正しいようです。accounting_user外部テーブルを作成および削除できるようにするには、他に何を指定する必要がありますか?

回答:


10

外部サーバーに権限を付与するには、次の手順に従います。

GRANT USAGE ON FOREIGN SERVER hr_db TO accounting_user;

詳細については、公式ページの例https://www.postgresql.org/docs/9.6/static/contrib-dblink-connect.htmlをご覧ください


許可を手伝ってくれましたが、拒否されたが、私は取得していますそのERROR: only superuser can change options of a file_fdw foreign table今...☹️
msciwoj

>権限はありましたが拒否されましたが、エラーが発生しました:スーパーユーザーのみがfile_fdw外部テーブルのオプションを変更できるようになりました>スーパーユーザーでtargetdbに接続し、許可の使用後に接続する必要があります
Diego Scaravaggi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.