Autorisation refusée pour un serveur étranger

8

J'essaie de configurer un utilisateur avec des autorisations limitées qui serait capable de créer des tables étrangères. J'ai deux bases de données, hr_dbet accounting_db. J'ai créé un hr_userutilisateur pour hr_dbet un accounting_userutilisateur pour accounting_db. Je veux seulement que l' accounting_userutilisateur ait des droits de sélection sur certaines hr_dbtables, telles que la userstable. Pour ce faire, en tant que superutilisateur, je suis allé dans la hr_dbbase de données et j'ai exécuté:

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

J'ai configuré une connexion à hr_dbpartir d' accounting_dbun wrapper de données étranger:

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

J'ai ensuite ajouté un mappage pour l' accounting_userutilisateur:

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

Le mot de passe pour accounting_userest le même que celui que j'utilise pour me connecter à partir de la ligne de commande. Cela fonctionne bien:

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

Je peux créer une table régulière dans la accounting_dbbase de données en tant accounting_userqu'utilisateur:

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

Mais si j'essaie de créer une table étrangère:

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

En tant que superutilisateur, je peux créer la hr_peopletable étrangère et accounting_usery aura accès. La connexion de données étrangère hr_dbsemble donc correcte. Que dois-je donner d'autre accounting_userpour qu'il puisse créer et supprimer des tables étrangères?

Shaun
la source

Réponses:

10

Pour accorder des autorisations pour le serveur étranger:

GRANT USAGE ON FOREIGN SERVER hr_db TO accounting_user;

Plus de détails disponibles dans l'exemple sur la page officielle https://www.postgresql.org/docs/9.6/static/contrib-dblink-connect.html

romain
la source
Cela a aidé avec l'autorisation refusée mais je reçois ERROR: only superuser can change options of a file_fdw foreign tablemaintenant… ☹️
msciwoj
> Cela a aidé avec l'autorisation refusée mais j'obtiens une ERREUR: seul le superutilisateur peut> modifier les options d'une table étrangère file_fdw maintenant… Vous devez vous connecter sur targetdb avec le superutilisateur et après utilisation de la subvention
Diego Scaravaggi