Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 12/11/2011 12:02:07
- marcandre
- Membre
Envoi d'un mot de passe via un script Shell pour exécution code SQL
Bonjour à tous,
Je suis en train de faire un script shell qui permettra d'importer des données à partir un fichier texte .
Seulement voilà la response de la commande me demande de rentrer un mot de passe, mais je voudrais envoyer le mot de passe de façon automatique .
Comment puis je faire .
J'ai créé un script shell par la commande vi voici le contenu du script shell :
cd /opt/PostgresPlus/8.4SS/bin/
./psql -f /dossier_script_sql/script.sql mabase -U postgres
"c'est là où j'envoi le mot de passe"
Cordialement.
Hors ligne
#2 12/11/2011 12:04:13
- gleu
- Administrateur
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
Le mieux est d'utiliser le fichier .pgpass. Ce dernier est utilisé par les outils PostgreSQL et permet une meilleure sécurité que de saisir le mot de passe sur la ligne de commande.
Voir http://docs.postgresqlfr.org/9.1/libpq-pgpass.html pour plus d'infos.
Guillaume.
Hors ligne
#3 12/11/2011 12:25:43
- marcandre
- Membre
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
Merci pour l'information .
Comment peut on indiquer qu'il faut utiliser le fichier .pgpass sachant qu'il se trouve dans le dossier :
/opt/PostgresPlus/8.4SS/
Cordialement .
Hors ligne
#4 12/11/2011 12:37:49
- gleu
- Administrateur
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
Le fichier .pgpass doit se trouver dans le répertoire personnel de l'utilisateur qui exécute le script. Donc il n'est pas nécessaire d'indiquer son emplacement.
Guillaume.
Hors ligne
#5 12/11/2011 13:05:39
- marcandre
- Membre
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
Le répertoir personnel de l'utilisateur postgres est /opt/PostgresPlus/8.4SS/ sachant que j'utilise root pour exécuter . Tandis que dans le répertoir personnel de root j'ai le contenu de .pgpass :
127.0.0.1:5432:*:postgres:motdepasse
Hors ligne
#6 12/11/2011 13:16:17
- gleu
- Administrateur
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
Oui, ça doit fonctionner.
Guillaume.
Hors ligne
#7 17/11/2011 12:20:41
- marcandre
- Membre
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
Bonjour à tous,
Je reviens vers vous en ce qui concerne le mot de passe demandé .
En effectuant une commande cat /etc/passwd je retrouve la ligne :
postgres:x:502:502:PostgreSQL:/opt/PostgresPlus/8.4SS:/bin/bash
j'ai .pgpass qui est dans le dossier /opt/PostgresPlus/8.4SS .
J'ai modifié le contenu du fichier .pgpass, j'ai mis
localhost:5432:*:postgres:motdepasse
au lieu de
localhost:5432:postgres:postgres:motdepasse
En effectuant la commande :
./psql -f /dossier_script_sql/script.sql mabase -U postgres
, j'ai toujours la réponse de la commande qui me demande le mot de passe .
Cordialement .
Hors ligne
#8 17/11/2011 12:24:46
- Marc Cousin
- Membre
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
Le fichier .pgpass n'est bien lisible que par l'utilisateur postgres ?
Marc.
Hors ligne
#9 17/11/2011 12:42:17
- marcandre
- Membre
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
J'ai lancé un chmod pour ne rendre accessible que par postgres :
voici la liste des fichiers y compris .pgpass dans le dossier : /opt/PostgresPlus/8.4SS
[root@ma_machine 8.4SS]# ls -la
total 10668
drwxr-xr-x 19 root daemon 4096 nov 17 11:12 .
drwxr-xr-x 4 root root 4096 oct 28 11:19 ..
drwxr-xr-x 2 root daemon 4096 jui 23 2010 bin
drwx------ 12 postgres postgres 4096 jui 2 13:39 data
drwxr-xr-x 4 root daemon 4096 jui 23 2010 doc
drwxr-xr-x 5 root daemon 4096 jui 23 2010 include
drwxr-xr-x 4 root daemon 4096 jui 23 2010 installer
drwxr-xr-x 3 root daemon 4096 jui 23 2010 lib
drwxr-xr-x 5 root daemon 4096 jui 23 2010 pgAdmin3
drwxr-xr-x 6 root root 4096 jui 23 2010 pgAgent
drwxr-xr-x 8 root root 4096 jui 23 2010 pgbouncer
drwxr-xr-x 4 root root 4096 jui 23 2010 pgJDBC
-rw------- 1 postgres postgres 41 nov 17 11:09 .pgpass
drwxr-xr-x 6 root root 4096 jui 23 2010 PostGIS
drwxr-xr-x 5 root root 4096 jui 23 2010 psqlODBC
drwxr-xr-x 4 root daemon 4096 jui 23 2010 scripts
drwxr-xr-x 5 root daemon 4096 jui 23 2010 share
drwxr-xr-x 4 root root 4096 jui 23 2010 Slony
drwxr-xr-x 4 root daemon 4096 jui 23 2010 stackbuilder
drwxr-xr-x 7 root root 4096 jui 23 2010 StackBuilderPlus
-rwx------ 1 root root 3554060 jui 23 2010 uninstall-pgmemcache
-rwx------ 1 root root 3651756 jui 23 2010 uninstall-postgresplus
-rwx------ 1 root daemon 3617918 jui 23 2010 uninstall-postgresql
J'ai avant effectué une exécution d'une commande :
chmod 600 ~/.pgpass
après m'être loggué en tant que postgres :
su - postgres
Hors ligne
#10 17/11/2011 13:15:16
- Marc Cousin
- Membre
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
Ah, zut, je n'ai pas fait attention:
./psql -f /dossier_script_sql/script.sql mabase -U postgres dit que vous vous connectez en utilisant une socket unix (pas de -h spécifié), alors que «localhost:5432:*:postgres:motdepasse» ne va correspondre que dans le cas d'une socket IP (à cause du localhost).
Marc.
Hors ligne
#11 17/11/2011 13:20:57
- marcandre
- Membre
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
Comment puisse je spécifier -h ?
Hors ligne
#12 17/11/2011 13:44:45
- rjuju
- Administrateur
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
Sinon avez-vous essayé de le lancer en tant que postgres ? avec une commande du genre :
su -l postgres -c 'psql -f /rep/script.sql mabase'
Edit : le -h se spécifie au niveau de psql :
psql -U postgresql -h 127.0.0.1 -f /rep/script.sql mabase
Dernière modification par rjuju (17/11/2011 13:47:35)
Julien.
https://rjuju.github.io/
Hors ligne
#13 17/11/2011 14:27:39
- marcandre
- Membre
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
Merci pour votre aide, pour le paramètre -h j'ai en effet spécifié l'adresse IP de locahost (127.0.0.1),
la commande ne me demande pas le mot de passe en mettant -h 127.0.0.1 et la requête spécifiée dans le fichier .sql s'exécute normalement .
Cordialement
Hors ligne
#14 17/11/2011 14:31:12
- Marc Cousin
- Membre
Re : Envoi d'un mot de passe via un script Shell pour exécution code SQL
L'autre solution c'est de marquer 'local' dans le pgpass, pour indiquer une socket unix. Il faut savoir qu'elles sont un peu plus performantes que les sockets TCP, en tout cas avec PostgreSQL
Marc.
Hors ligne