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_db
et accounting_db
. J'ai créé un hr_user
utilisateur pour hr_db
et un accounting_user
utilisateur pour accounting_db
. Je veux seulement que l' accounting_user
utilisateur ait des droits de sélection sur certaines hr_db
tables, telles que la users
table. Pour ce faire, en tant que superutilisateur, je suis allé dans la hr_db
base 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_db
partir d' accounting_db
un 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_user
utilisateur:
CREATE USER MAPPING FOR accounting_user SERVER hr_db
OPTIONS (user 'accounting_user', password 'secretpassword');
Le mot de passe pour accounting_user
est 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_db
base de données en tant accounting_user
qu'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_people
table étrangère et accounting_user
y aura accès. La connexion de données étrangère hr_db
semble donc correcte. Que dois-je donner d'autre accounting_user
pour qu'il puisse créer et supprimer des tables étrangères?
ERROR: only superuser can change options of a file_fdw foreign table
maintenant… ☹️