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?

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.