PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 22/05/2017 17:09:37

BastienM
Membre

RESOLU : Problème commande COPY TO et super_utilisateur

Bonjour,


J’ai un problème avec l’utilisation d’un script SQL comportant une commande COPY TO.

Voici la partie SQL qui me pose problème :


PERFORM * FROM tmp WHERE affaire = choix_affaire AND partnumber = choix_partnumber AND mime_type = choix_type;
IF FOUND THEN


---------------------------------------------------------------------------------
--Début de la boucle FOR LOOP
---------------------------------------------------------------------------------


FOR i IN minid..maxid LOOP


directory1 := (SELECT tmp.date FROM tmp WHERE id = increment);
directory1 := substr (directory1, 1, 10);   --Sélection de la date sans prendre en compte l'heure
directory2 := (SELECT tmp.name FROM tmp WHERE id = increment);


PERFORM * FROM tmp WHERE id = increment; --Vérification que la variable increment est égale à une valeur de la colonne id de la table tmp
IF FOUND THEN  --FOUND prend la valeur true ou false en fonction de du résultat de la requête PERFORM
EXECUTE format ('COPY (SELECT data FROM tmp WHERE id = %L) TO ''D:/_users/BMI/test/' || directory1 || ' ' || directory2 ||'''(format binary)',increment);
END IF;
increment := increment + 1 ;  --Changement de ligne à vérifier
END LOOP;


Cependant, même si le script fonctionne, la commande :


EXECUTE format ('COPY (SELECT data FROM tmp WHERE id = %L) TO ''D:/_users/BMI/test/' || directory1 || ' ' || directory2 ||'''(format binary)',increment);

, requière d’être super-utilisateur pour pouvoir faire un COPY, j’aimerais donc savoir s’il y a un moyen de contourner cette contrainte ?


Cordialement
BastienM

Dernière modification par BastienM (24/05/2017 14:08:23)

Hors ligne

#2 22/05/2017 17:39:53

rjuju
Administrateur

Re : RESOLU : Problème commande COPY TO et super_utilisateur

Il n'est pas possible de lever cette limitation.


La seule option est de déclarer cette fonction (ou une autre responsable du copy uniquement) en SECURITY DEFINER, la créer en tant que super utilisateur et donner les doits aux utilisateurs devant l'appeler.  Il s'agit bien évidemment d'une solution relativement dangereuse, vu que vous donnez des droits super utilisateur à un utilisateur standard.

Hors ligne

#3 24/05/2017 14:08:07

BastienM
Membre

Re : RESOLU : Problème commande COPY TO et super_utilisateur

Bonjour,


L'utilisation du droit SUPERUSER ne me dérangeant pas, j'ai trouvé une solution alternative.
J'ai modifier le rôle qui ouvre le fichier .sql avec un rôle SUPERUSER et au début et à la fin de mon fichier .sql, j'ai fais :
ALTER ROLE databaseuser WITH SUPERUSER;
et
ALTER ROLE databaseuser WITH NOSUPERUSER;


Cordialement
BastienM

Hors ligne

Pied de page des forums