Vous n'êtes pas identifié(e).

#1 02/12/2014 15:57:11

ced
Membre

Postgres_fdw : user mapping, groupe et droits

Bonjour,

Je commence à tester postgres_fdw pour connecter deux serveurs distants, dont les bases de données sont complémentaires.
Sur mon serveur1 (celui sur lequel je veux installer les tables distantes contenues physiquement dans le serveur2), j'ai un utilisateur user1 qui est membre d'un rôle serveur1_admin. Ce rôle possède tous les droits sur serveur1 (quasi super-user).

Voici ce que ça donne :
-------------------------------------------------------------------------------------
CREATE SERVER serv2 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'serveur2', dbname 'base2', port '5432');
ALTER SERVER serv2 OWNER TO serveur1_admin;
-------------------------------------------------------------------------------------
Je crée un mapping utilisateur pour serveur1_admin sur mon serveur2 (en utilisant un utilisateur user2 qui a les droits de SELECT sur serveur2) :
-------------------------------------------------------------------------------------
CREATE USER MAPPING FOR serveur1_admin SERVER serv2 OPTIONS (user 'user2', password 'pwd2');
-------------------------------------------------------------------------------------

Je crée un nouveau schéma sur serveur1 pour recevoir les tables étrangères de serveur2 :
-------------------------------------------------------------------------------------
CREATE SCHEMA base2
  AUTHORIZATION production_admin;
GRANT ALL ON SCHEMA base2 TO serveur1_admin;
GRANT USAGE ON SCHEMA base2 TO public;
-------------------------------------------------------------------------------------
Je crée une table étrangère sur serveur1 :
-------------------------------------------------------------------------------------
CREATE FOREIGN TABLE base2.matable
(
  col1 INT NOT NULL,
  col2 character varying(12),
  col3 character varying(12),
  col4 character varying(50)
)
SERVER serv2
OPTIONS (schema_name 'schema2', table_name 'matable_sur_serveur2');
ALTER FOREIGN TABLE base2.matable
  OWNER TO serveur1_admin;
-------------------------------------------------------------------------------------
Maintenant, si je suis connecté comme user1, la requête sur la table distante échoue avec le message suivant :
ERROR: user mapping not found for "user1"
État SQL :42704

Cela signifie-t-il que si user1 est membre de serveur1_admin, qui a les droits pour interroger la table distante, je suis obligé de créer un mapping user pour chaque utilisateur membre de serveur1_admin ?
Ou bien est-ce que j'ai raté une étape ?

Ce qui est étonnant (quoi que), c'est qu'un user mapping avec PUBLIC fonctionne bien (mais c'est sans doute dû au caractère particulier du rôle PUBLIC) :
-------------------------------------------------------------------------------------
CREATE USER MAPPING FOR public SERVER serv2 OPTIONS (user 'user2', password 'pwd2');
-------------------------------------------------------------------------------------
Là, la requête sur la table étrangère renvoie un résultat conforme.

Merci d'avance pour votre aide,

ced

Hors ligne

#2 04/12/2014 09:51:37

gleu
Administrateur

Re : Postgres_fdw : user mapping, groupe et droits

Cela signifie-t-il que si user1 est membre de serveur1_admin, qui a les droits pour interroger la table distante, je suis obligé de créer un mapping user pour chaque utilisateur membre de serveur1_admin ?

Exact. Le mapping se fait pour l'utilisateur connecté.

Ce qui est étonnant (quoi que), c'est qu'un user mapping avec PUBLIC fonctionne bien (mais c'est sans doute dû au caractère particulier du rôle PUBLIC)

Vous avez compris. PUBLIC est très particulier, dans le sens où il englobe tout le monde et est non modifiable.


Guillaume.

Hors ligne

#3 05/12/2014 10:03:45

ced
Membre

Re : Postgres_fdw : user mapping, groupe et droits

Je regretterais presque d'avoir compris... Ça va m'obliger à créer un mapping utilisateur par utilisateur réellement connecté, mais qu'à cela ne tienne.

Merci pour les confirmations.

Hors ligne

Pied de page des forums