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/08/2012 00:57:10

unisol
Membre

creation user + database

Bonjour,

je souhaiterais faire executer un fichier bash suivant depuis une page PHP. Mais je me heurte au probleme des droits d'execution.
En effet, depuis une page PHP, c'est l'utilisateur www-data qui est actif, ce provoque un probleme.
------------------------------------------------------------
#!/bin/bash

su - postgres -c "psql -c \"create user $1 WITH ENCRYPTED PASSWORD '$2';\""
su - postgres -c "psql -c \"CREATE DATABASE $1 WITH OWNER = $1 TEMPLATE = modele ENCODING = 'UTF8'  TABLESPACE = pg_default  LC_COLLATE = 'fr_FR.UTF-8'  LC_CTYPE = 'fr_FR.UTF-8'   CONNECTION LIMIT = -1;\""
su - postgres -c "psql -c\"GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to $1;\" $1"
--------------------------------------------------------------

Donc, est il possible de créer un script pure PHP, du genre qui marche...

$dbconn = pg_connect("host=localhost user='monuser' password='mon*mot*passe' port='5433' ")
                or die('Connexion impossible : ' . pg_last_error());

            $query1 = "CREATE USER 'user1' WITH ENCRYPTED PASSWORD '".$2."'";//créer un nouvel utilisateur
            $result1 = pg_query($query1) or die('Échec de la requête : ' . pg_last_error());

            $query2 = "ALTER ROLE 'user1' WITH CREATEDB";
            $result2 = pg_query($query2) or die('Échec de la requête : ' . pg_last_error());

            $query3 = "CREATE DATABASE 'user1' WITH OWNER = 'user1' TEMPLATE = modele ENCODING = 'UTF8'  TABLESPACE = pg_default LC_COLLATE = 'fr_FR.UTF-8'  LC_CTYPE = 'fr_FR.UTF-8' CONNECTION LIMIT = -1";
            $result3 = pg_query($query3) or die('Échec de la requête : ' . pg_last_error());

merci par avance de votre aide

Hors ligne

#2 10/08/2012 09:29:34

gleu
Administrateur

Re : creation user + database

Oui, il est possible d'écrire un tel script. L'utilisateur pour la connexion doit avoir les attributs CREATEROLE et CREATEDATABASE.


Guillaume.

Hors ligne

#3 10/08/2012 14:19:56

unisol
Membre

Re : creation user + database

Bonjour,

merci pour votre réponse,

je confirme que le script marche bien,
mais, j'ai du donner des droit superuser (pas sécurisé) pour y arriver:

si la commande :
CREATE USER utilisateur WITH ENCRYPTED PASSWORD 'mot_de_passe';
se passe bien

la commande suivante genere une erreur :
CREATE DATABASE dbtest  WITH OWNER = test1 TEMPLATE = modele ENCODING = 'UTF8'  TABLESPACE = pg_default LC_COLLATE = 'fr_FR.UTF-8'  LC_CTYPE = 'fr_FR.UTF-8' CONNECTION LIMIT = -1

ERREUR:  doit être un membre du rôle « test1 »


********** Erreur **********

ERREUR: doit être un membre du rôle « test1 »
État SQL :42501

---
voici les caractéristiques de mon user avec le quel j'exécute ces commandes :

CREATE ROLE userchef LOGIN
  NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION;

--

merci pour votre réponse

Hors ligne

#4 10/08/2012 15:18:11

gleu
Administrateur

Re : creation user + database

Changer la propriété d'un objet nécessite qu'on soit superutilisateur ou membre du propriétaire. Donc, dans votre exemple, faite un "ALTER GROUP test1 ADD USER userchef" et ça devrait mieux aller.


Guillaume.

Hors ligne

Pied de page des forums