Permissão negada para servidor estrangeiro

8

Estou tentando configurar um usuário com permissões limitadas que poderiam criar tabelas estrangeiras. Eu tenho dois bancos de dados hr_dbe accounting_db. Eu criei um hr_userusuário para hr_dbe um accounting_userusuário para accounting_db. Eu só quero que o accounting_userusuário tenha direitos de seleção em algumas hr_dbtabelas, como a userstabela. Para fazer isso, como superusuário, fui ao hr_dbbanco de dados e executei:

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

Eu configurar uma conexão a hr_dbpartir de accounting_dbutilizar um invólucro de dados externa:

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

Adicionei um mapeamento para o accounting_userusuário:

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

A senha para accounting_useré a mesma que eu uso para efetuar login na linha de comando. Isso funciona bem:

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

Eu posso criar uma tabela regular no accounting_dbbanco de dados como o accounting_userusuário:

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

Mas se eu tentar criar uma tabela estrangeira:

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

Como superusuário, posso criar a hr_peopletabela estrangeira e accounting_userela terá acesso a ela. Portanto, a conexão de dados externos hr_dbparece correta. O que mais preciso fornecer accounting_userpara que seja possível criar e eliminar tabelas estrangeiras?

Shaun
fonte

Respostas:

10

Para conceder permissões para o servidor externo:

GRANT USAGE ON FOREIGN SERVER hr_db TO accounting_user;

Mais detalhes disponíveis no exemplo na página oficial https://www.postgresql.org/docs/9.6/static/contrib-dblink-connect.html

romano
fonte
Isso ajudou com a permissão negada, mas estou recebendo ERROR: only superuser can change options of a file_fdw foreign tableagora ... ☹️
msciwoj 24/04/19
> Isso ajudou com permissão negada, mas eu estou recebendo erro: somente superusuário pode> opções de mudança de um file_fdw tabela externa agora ... Você precisa conectar em TargetDB com superusuário e após o uso de concessão
Diego Scaravaggi