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

#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)

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 smile


Marc.

Hors ligne

Pied de page des forums