OVH Cloud OVH Cloud

Could not connect to database: Access denied for user....

16 réponses
Avatar
Maminirina Hasina RAKOTONINDRAINY
Bonjour,

Je suis bloqu=E9 sur une erreur depuis quelques jour.
Je me connecte =E0 une base de donn=E9es mysql. J'ai le message d'erreur
suivant :

"DBI connect('articom;ns366702.ovh.net','articom',...) failed: Access
denied for user ''@'ns366702.ovh.net' to database 'articom' at cgi-bin/
perl.pl line 207
Could not connect to database: Access denied for user
''@'ns366702.ovh.net' to database 'articom' at cgi-bin/perl.pl line
207."

En faisant un diagnostic du programme, la ligne 30 ne retourne pas de
r=E9sultat.

Quelqu'un pourrait-il me filer un coup de main?

Merci.

Voici le code source :
{{
1 #!/usr/bin/perl -w
2
3 use strict;
4 use warnings;
5 use DBI;
6 use DBD::mysql;
7 use Text::CSV;
8 use CGI;
9 use Text::Iconv;
10 use Env;
11 use LWP::Simple;
12 use LWP::UserAgent;
13 use HTTP::Request;
14 use HTTP::Response;
15 use HTML::LinkExtor;
16
17 my $url=3D new CGI;
18 my $filename =3D $url->param("le_csv");
19 my $upload_filehandle =3D $url->upload("le_csv");
20 my $hostname=3D$ENV{SERVER_NAME};
21
22
23 #my $repertoire=3D"/home/articom-web/public_html/";
24
25 print $url->header();
26
27 $hostname =3D~ s/^www\.//g;
28
29 #IP du SERVEUR
30 my $ip =3D $ENV{'SERVER_ADDR'};
31 my $host =3D "ns366702.ovh.net";
32 my $database =3D "articom";
33 my $user =3D "articom";
34 my $password =3D "";
35
36 if($ip eq "192.168.0.7") # adresse IP phenom
37 {
38 $host =3D "localhost";
39 $database =3D "articom";
40 $user =3D "articom";
41 $password =3D "";
42 }
43 elsif($ip eq "91.121.99.97") # Serveur 1 qui se connecte au serveur
2
44 {
45 $host =3D "ns366702.ovh.net";
46 $database =3D "articom";
47 $user =3D "articom";
48 $password =3D "";
49 }
50
51
52 elsif($ip eq "94.23.19.58") # Serveur 2 IP 1
53 {
54 $host =3D "localhost";
55 $database =3D "articom_un";
56 $user =3D "articom";
57 $password =3D "";
58 }
59 elsif($ip eq "91.121.62.106") # Serveur 2 IP 2
60 {
61 $host =3D "localhost";
62 $database =3D "articom_deux";
63 $user =3D "articom";
64 $password =3D "";
65 }
66 elsif($ip eq "87.98.221.158") # Serveur 2 IP 3
67 {
68 $host =3D "localhost";
69 $database =3D "articom_trois";
70 $user =3D "articom";
71 $password =3D "";
72 }
73 elsif($ip eq "87.98.131.220") # Serveur 2 IP 4
74 {
75 $host =3D "localhost";
76 $database =3D "articom_quatre";
77 $user =3D "articom";
78 $password =3D "";
79 }
80 if($filename ne '')
81 {
82 my $table_gratuits =3D "fiche_champs_gratuits";
83 my $table_payants =3D "fiche_champs_payants";
84 my $table_portail =3D "portails";
85
86 my $connect =3D DBI->connect ("DBI:mysql:$database;$host",$user,
$password);
87 my $changed =3D Text::CSV->new({sep_char =3D> ';', binary =3D> 1});
88 my $converter =3D Text::Iconv->new("iso-8859-1", "utf-8");
89
90 my $sql_portail=3D"SELECT id FROM $table_portail WHERE
nom_domaine =3D '$hostname'";
91 my $query_portail =3D $connect->prepare($sql_portail);
92 $query_portail->execute;
93 my $portail;
94
95 $query_portail->bind_columns(\$portail);
96 $query_portail->fetch;
97 $query_portail->finish();
98
99
100 ## Supprimer les fiches de ce portail
101 my $sql_delete_fiv_payants=3D"DELETE FROM fiche_champs_payants
102 WHERE fiche_champs_payants.id
103 IN (SELECT `fiche_champs_gratuits`.id FROM
`fiche_champs_gratuits`
104 WHERE `fiche_champs_gratuits`.id_portail =3D
$portail)";
105 my $delete_fiv_payants =3D $connect->prepare
($sql_delete_fiv_payants);
106 $delete_fiv_payants->execute;
107 $delete_fiv_payants->finish();
108
109 my $sql_delete_fiv_gratuits=3D"DELETE FROM fiche_champs_gratuits
WHERE id_portail =3D $portail";
110 my $delete_fiv_gratuits =3D $connect->prepare
($sql_delete_fiv_gratuits);
111 $delete_fiv_gratuits->execute;
112 $delete_fiv_gratuits->finish();
113
114
115 my $tel_portable=3D'';
116 my $tel_fixe=3D '';
117
118 my $zero=3D0;
119
120 #############################################
121 # fonction traitant les caract=E8res sp=E9ciaux #
122 #############################################
123 sub treatspecialCaracter($){
124 my $x=3Dshift;
125 $x =3D~ s/\'/ /g;
126 $x =3D~ s/\"/ /g;
127 $x =3D~ s/\',\)/\'\)/g;
128 return $x;
129 }
130 #############################################
131
132 while (<$upload_filehandle>)
133 {
134 if ($zero=3D=3D0)
135 {$zero ++;}
136 else
137 {
138 my $converted=3D$converter->convert($_);
139 if ($changed->parse($converted))
140 {
141 my @columns =3D $changed->fields();
142
143 # Dans la colonne Telephone
144 # je remplace les espaces et les points
145 $columns[5]=3D~ s/ //g;
146 $columns[5]=3D~ s/\.//g; # le point doit etre echape
147
148 if($columns[5] =3D~ /^06.+/)
149 {
150 $tel_portable =3D $columns[5];
151 $tel_fixe =3D '';
152 }
153 else
154 {
155 $tel_fixe =3D $columns[5];
156 $tel_portable=3D'';
157 }
158
159 ###############################################
160 # Insertion dans la table fiche champ gratuit #
161 ###############################################
162 my $tmp =3D "INSERT INTO $table_gratuits VALUES
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
163 my $query =3D $connect->prepare($tmp);
164 my $res =3D $query->execute('',
165 &treatspecialCaracter
( $columns[0]),
166 &treatspecialCaracter
( $portail),
167 &treatspecialCaracter
( $tel_fixe),
168 '',
169 &treatspecialCaracter
( $tel_portable),
170 &treatspecialCaracter
( $columns[7]),
171 &treatspecialCaracter
( $columns[2]),
172 &treatspecialCaracter
( $columns[3]),
173 &treatspecialCaracter
( $columns[4]),
174 '',
175 '',
176 '',
177 '',
178 '',
179 ''
180 );
181 $query->finish();
182
183 ##############################################
184 # Insertion dans la table fiche champ payant #
185 ##############################################
186 if ($res=3D=3D1) # si l'insertion dans table fiche
champ gratuit a =E9t=E9 r=E9alis=E9 avec succ=E9s #
187 {
188 my $query_2 =3D $connect->prepare("INSERT INTO
$table_payants VALUES('', '', '', '', '')");
189 $query_2->execute;
190 $query_2->finish();
191 }
192 else # echec de l'insertion dasn table fiche champ
gratuit #
193 {
194 print "Erreur lors du charegement du fichier
CSV";
195 }
196 ##############################################
197
198 }
199 }
200 }
201 $connect->disconnect();
202 }
203
204 my $repertoire=3D"../";
205 my $destination_table =3D "towns";
206 my %hash_town =3D ();
207 my $destination_connect =3D DBI->connect ("DBI:mysql:$database;
$host","articom","")
208 || die "Could not connect to database: "
209 . DBI-> errstr;
210
211 my $town_query =3D $destination_connect->prepare(" SELECT
code_postal, departement.nom_departement as nom_departement
212 FROM
fiche_champs_gratuits
213 JOIN departement
214 ON
departement.num_departement =3D ROUND((code_postal - (code_postal %
1000)) /1000)
215 ");
216
217
218 my($code_postal_0,$nom_departement);
219 $town_query->execute();
220 $town_query->bind_columns(undef, \$code_postal_0,\
$nom_departement);
221
222
223 while($town_query->fetch())
224 {
225 $hash_town{$code_postal_0}=3D$nom_departement;
226 }
227 $town_query->finish();
228
229 # purge les nom de fichiers FIV
230 my $purge_query =3D $destination_connect->prepare("UPDATE
fiche_champs_gratuits SET fichier =3D NULL");
231 $purge_query->execute;
232 $purge_query->finish();
233
234 my $destination_query =3D $destination_connect->prepare("SELECT
id,nom,ville,code_postal
235 FROM
fiche_champs_gratuits
236 ");
237 my($id,$nom, $ville,$code_postal);
238 $destination_query->execute();
239 $destination_query->bind_columns(undef, \$id,\$nom,\$ville,\
$code_postal);
240
241 my $update_query =3D $destination_connect->prepare("UPDATE
fiche_champs_gratuits SET fichier =3D ? WHERE id =3D ?");
242
243 my $contenu =3D "";
244
245 open(F, ">", "../map.txt");
246
247 while($destination_query->fetch())
248 {
249 my $nom_fichier =3D $hash_town{$code_postal}." ".$ville." ".
$nom;
250 $nom_fichier =3D~ s/[^\w]/-/g;
251 $nom_fichier =3D~ s/(-)+$//g;
252 $nom_fichier =3D~ s/(-)+/-/g;
253 $nom_fichier =3D~ tr/A-Z/a-z/;
254 print F $nom_fichier.".php php/fiches-
virtuelles.php?id=3D$id "."\n";
255 $update_query->execute($nom_fichier,$id);
256 $update_query->finish();
257 }
258 $destination_query->finish();
259
260 # purge noms fichiers ARTICLES
261 my $purge_articles=3D$destination_connect->prepare("UPDATE
article_libre SET fichier=3D NULL");
262 $purge_articles->execute;
263 $purge_articles->finish();
264
265 my $update_article=3D$destination_connect->prepare("UPDATE
article_libre SET fichier =3D ? WHERE id_article =3D ?");
266
267 my $articles_select=3D$destination_connect->prepare("SELECT
id_article, titre_gauche FROM article_libre");
268 my ($id_article, $titre_gauche);
269 $articles_select->execute();
270 $articles_select->bind_columns(undef, \$id_article, \
$titre_gauche);
271 while($articles_select->fetch())
272 {
273 my $nom_article=3D$titre_gauche;
274 $nom_article=3D~ s/[^\w]/-/g;
275 $nom_article=3D~ s/(-)+$//g;
276 $nom_article=3D~ s/(-)+/-/g;
277 $nom_article=3D~ tr/A-Z/a-z/;
278 print F $nom_article.".php php/article.php?id=3D
$id_article "."\n";
279 $update_article->execute($nom_article,$id_article);
280 $update_article->finish();
281 }
282
283 $articles_select->finish();
284
285 close(F);
286
287 $destination_connect->disconnect();
288
289 if($filename eq '')
290 {
291 print "<html><head></head><body><a href=3D\"http://$hostname/
\">Revenir</a></body></html>";
292 }
293 else
294 {
295 print "<html><head></head><body><a href=3D\"http://$hostname/
backoffice/php/ajouter_csv.php\">Revenir</a></body></html>";
296 }
}}

6 réponses

1 2
Avatar
jl_morel
Dans l'article <62a4cb62-e01a-48b2-a641-
, a
dit...

Mon diagnostic me donne que les variables $ENV ne retournent aucun
résultat(Ligne 20, 30 ...).
Je ne sais pas si il y a une mauvaise configuration ou pas.



C'est très curieux que $ENV{SERVER_NAME} ne soit pas défini.

Juste une question stupide : comment testez-vous votre script ?

On dirait, d'après les messages d'erreur, que vous faites
perl monscript.cgi
dans une console !

Dans ce cas, c'est normal que $ENV{SERVER_NAME} ne soit pas défini ;-)

Vous ne faites pas ça, hein ?

--
J-L.M.
http://www.bribes.org/perl
Avatar
Maminirina Hasina RAKOTONINDRAINY
On 23 juil, 12:46, (Jean-Louis MOREL) wrote:
Dans l'article <62a4cb62-e01a-48b2-a641-
, a
dit...



>Mon diagnostic me donne que les variables $ENV ne retournent aucun
>résultat(Ligne 20, 30 ...).
>Je ne sais pas si il y a une mauvaise configuration ou pas.

C'est très curieux que $ENV{SERVER_NAME} ne soit pas défini.

Juste une question stupide : comment testez-vous votre script ?

On dirait, d'après les messages d'erreur, que vous faites
  perl monscript.cgi
dans une console !

Dans ce cas, c'est normal que $ENV{SERVER_NAME} ne soit pas défini ;-)

Vous ne faites pas ça, hein ?

--
J-L.M.http://www.bribes.org/perl



Tu as raison, je la compile dans une console. Je me suis faussé le
piste. Mais en exécutant le fichier perl dans un browser, il me fait
télecgarger le fichier perl en question. Voyez ce lien
http://www.cabinet-cogesti.com/cgi-bin/perl.pl.
Avatar
jl_morel
Dans l'article <abec8b97-ca04-47b0-b440-
, a
dit...

Tu as raison, je la compile dans une console. Je me suis faussé le
piste. Mais en exécutant le fichier perl dans un browser, il me fait
télecgarger le fichier perl en question. Voyez ce lien
http://www.cabinet-cogesti.com/cgi-bin/perl.pl.



Votre serveur n'est pas configuré pour exécuter un script avec
l'extension .pl

Généralement les scripts on une extension en .cgi
Essayez de renommer votre script en perl.cgi

Sinon, avez-vous accès au fichier de configuration de votre serveur ?

Remarque : votre répertoire cgi-bin est listable : pas bon pour la
sécurité.

--
J-L.M.
http://www.bribes.org/perl
Avatar
Maminirina Hasina RAKOTONINDRAINY
On 23 juil, 16:32, (Jean-Louis MOREL) wrote:
Dans l'article <abec8b97-ca04-47b0-b440-
, a
dit...



>Tu as raison, je la compile dans une console. Je me suis faussé le
>piste. Mais en exécutant le fichier perl dans un browser, il me fait
>télecgarger le fichier perl en question. Voyez ce lien
>http://www.cabinet-cogesti.com/cgi-bin/perl.pl.

Votre serveur n'est pas configuré pour exécuter un script avec
l'extension .pl

Généralement les scripts on une extension en .cgi
Essayez de renommer votre script en perl.cgi

Sinon, avez-vous accès au fichier de configuration de votre serveur ?

Remarque : votre répertoire cgi-bin est listable : pas bon pour la
sécurité.

--
J-L.M.http://www.bribes.org/perl



Votre serveur n'est pas configuré pour exécuter un script avec
l'extension .pl


Comment reconfigurer le serveur por éxécuter le script perl?

Généralement les scripts on une extension en .cgi
Essayez de renommer votre script en perl.cgi


Le renommage en .cgi n'a pas résout le problème.

Sinon, avez-vous accès au fichier de configuration de votre serveur ?


Oui, j'ai accès.
Avatar
Jogo
Sur fr.comp.lang.perl, Maminirina Hasina RAKOTONINDRAINY disait :

Votre serveur n'est pas configuré pour exécuter un script avec
l'extension .pl


Comment reconfigurer le serveur por éxécuter le script perl?



On s'éloigne de la charte du groupe, mais bon...

S'il s'agit d'apache, il est généralement installé avec une
documentation online très complète (et parfois même traduite). Chez
moi, on y trouve un tutoriel intitulé « Dynamic Content with CGI ». On
y apprend notament les 2 solutions suivantes :

- Utiliser ScriptAlias, un équivalent d'Alias qui indique en plus que
le répertoire en question (et ses sous-répertoires) contiennent des
script CGI et non des pages statiques.

- Utiliser l'option ExecCGI et la directive SetHandler dans une
section Directory, Location ou Files.

Bref RTFM.

--
[...] en prenant l'argent des pauvres et en le donnant aux riches, nous
stimulons l'effort et, partant, l'économie
- John Kenneth Galbraith -
Avatar
Maminirina Hasina RAKOTONINDRAINY
On 24 juil, 20:32, Jogo wrote:
Sur fr.comp.lang.perl, Maminirina Hasina RAKOTONINDRAINY disait :

>> Votre serveur n'est pas configuré pour exécuter un script avec
>> l'extension .pl
> Comment reconfigurer le serveur por éxécuter le script perl?

  On s'éloigne de la charte du groupe, mais bon...

  S'il s'agit d'apache, il est généralement installé avec une
documentation online très complète (et parfois même traduite). Chez
moi, on y trouve un tutoriel intitulé « Dynamic Content with CGI ». On
y apprend notament les 2 solutions suivantes :

 - Utiliser ScriptAlias, un équivalent d'Alias qui indique en plus qu e
le répertoire en question (et ses sous-répertoires) contiennent des
script CGI et non des pages statiques.

 - Utiliser l'option ExecCGI et la directive SetHandler dans une
section Directory, Location ou Files.

  Bref RTFM.

--
 [...] en prenant l'argent des pauvres et en le donnant aux riches, nou s
 stimulons l'effort et, partant, l'économie
 - John Kenneth Galbraith -



Enfin, j'ai trouvé la solution.
Il s'agissait de problème de configuration apache:
./conf.d/cgi:<Directory /home/*/public_html/cgi-bin>
./conf.d/cgi:SetHandler cgi-script


Je vous remercie tous de votre coopération.
1 2