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 10/05/2011 08:12:28

mortimer.pw
Membre

Donner accès à pg_read_file à un simple utilisateur

Bonjour à tous,

Je travaille sur des bases supérieures à 8.0 sous Red-Hat et Cent-OS.

Nous travaillons à la sécurisation de nos système.

Plusieurs de nos applicatif se connectent en super-utilisateur (postgres) et utilisent la fonction pg_read_file pour allé lire dans un fichier une valeur SITE qui indique sur quel site l'outil travaille.

Nous avons créé des "utilisateurs applicatifs", en restreignant les droits (delete interdit, select/insert/update uniquement sur certaines tables de certains schémas) et apparemment la fonction pg_read_file ne marche plus.

J'ai lu dans la Doc que "L'utilisation de ces fonctions est restreinte aux superutilisateurs".

Y a t'il un moyen de contourner ce problème ? ou existe t'il une autre fonction utilisable par un simple utilisateur ?

Merci pour les réponses.

Hors ligne

#2 10/05/2011 19:31:38

gleu
Administrateur

Re : Donner accès à pg_read_file à un simple utilisateur

Il vous suffit de créer une fonction de type security definer qui fait appel à cette fonction. La nouvelle fonction doit évidemment être créé par un superutilisateur. Par exemple :

mortimer=# create function su_read_file(text, bigint, bigint) returns text language sql security definer as $$
mortimer$# select pg_read_file($1, $2, $3);
mortimer$# $$;
CREATE FUNCTION
mortimer=# \q
guillaume@laptop:~$ psql -U a mortimer
psql (9.0.4)
Type "help" for help.

mortimer=> select pg_read_file('postgresql.conf',1,200);
ERROR:  must be superuser to read files
mortimer=> select su_read_file('postgresql.conf',1,200);
                su_read_file                
--------------------------------------------
  -----------------------------            +
 # PostgreSQL configuration file           +
 # -----------------------------           +
 #                                         +
 # This file consists of lines of the form:+
 #                                         +
 #   name = value                          +
 #                                         +
 # (The "=" is optional.)  Whitespace ma
(1 row)

Guillaume.

Hors ligne

Pied de page des forums