Vous n'êtes pas identifié(e).
Pages : 1
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
Oui, il est possible d'écrire un tel script. L'utilisateur pour la connexion doit avoir les attributs CREATEROLE et CREATEDATABASE.
Guillaume.
Hors ligne
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
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
Pages : 1