Le 15/09/2011 22:50, Frédéric ZULIAN a écrit :
> Il a récupéré toute la base : Identifiant et mdp.
root // P@ssw0rd ?
> Du coût je n'ose plus redémarrer mon serveur.
>
> Une idée de la parade ?
Déjà il faudrait savoir par où il est passé.
Ce n'est peut-être pas MySQL qui a été hacké, mais un soft annexe
connecté à MySQL.
Sinon au pif :
— MySQL et/ou PHPMyAdmin sont-ils en DMZ ?
— Chaque application MySQL a-t-elle son propre compte d'accès, avec un
pass suffisamment robuste et sans aucun droit autre que sur la base
concernée et sans droit admin ?
Le soucis vient peut-être de là déjà…
- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQEcBAEBAgAGBQJOcmiDAAoJEK8zQvxDY4P9N5wH/3OkNcB0PR1+uUzuN7EQYXWF
F9oP4G5FoEXICD10F0OzfrJOvGLFymbl9aMe7/eM+9z0L0QDh4Vg+Xucj3U3n6iw
EFxbzCFOEmHlXS5hY0h4YMaXm9VVLdX+SWXc3pYiWAqV6+NCBaFcMZls5i7PzuDc
icYN9dQ9zJ429X9JBhae8a38yRzGc234ErTdcKKRo0Vq7Hn9ELgxW56Eoqv/TeDq
1BLPNujqzDSfHsXuznG86J5jlUojeMv+JA7DO58rsT0M9a6IUc9n3VuXStjDxejH
yxNRw/DeG0HDAcehFjgo2QVyiv0AhD0Frgrh6Ods3/eeuSusJXzh6JGUyDHD9yw=
=7OTE
-----END PGP SIGNATURE-----
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/4e726889$0$7290$426a...@news.free.fr
Le jeudi 15 septembre 2011, Frédéric ZULIAN a écrit...
> Je viens de me faire pirater ma base de données MYSQL.
> apache 2.2.19-2
> mysql-server 5.1.58-1
> Le petit plaisantin, qui m'a envoyé un mail pour m'avertir de son
> « exploit » utilise win NT 5 avec HAVIJ v1.15.
Les logs du serveur sont ils activés ? Pour retrouver la requête
effectuée. En prod, il y a peu de chances …
Sinon, si tu as quelque chose sur lui (sa machine), tu pourrais
retrouver les pages qu'il a chargées (dans les logs du serveur ouèbe),
et tenter de lancer dessus un outil de pénétration sql.
--
jm
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/20110915222607.GB11319@espinasse
...
> HAVIJ nécessite un site web non sécurisé pour fonctionner.
> Il se base sur les faiblesses des applications web autour de MySQL, pas
> de celles de MySQL directement.
ben, d'après ce qu'il dit l'accès vers le svr mysql est ouvert (p3306)
...
> Non effectivement, HAVIJ fonctionne par injection SQL et peut accéder à
> ta base sans avoir d'accès au MySQL.
> Mais ça, tant que PHP vivra…
ça n'est pas tout à fait vrai: disons plutôt tant que les programmeurs php
ne contrôleront correctement ni leurs morceaux de code ni les droits des
fichiers & directories.
> Une « parade » possible est de limiter au maximum les droits des comptes
> utilisateurs MySQL.
> Un compte par utilisateur et par base de données, des droits
> ultra-limités (select / update / delete suffisent généralement), etc.
Ajoutons: un escaping systématique de toutes les données envoyées vers la DB.
Mais au risque de me répéter, la meilleure parade reste d'inclure le code
"actif" dans la DB (procs stockées); mais je doute qu'à ce jour ce soit facile
(voire même possible à 100%) avec mysql.
--
Quid me anxius sum?
[ What? Me, worry? ]
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/20110917003...@anubis.defcon1
Le 17/09/2011 00:00, Frédéric ZULIAN a écrit :
> Hack de Mysql :
Ce n'est pas un hack de MySQL, mais une injection SQL d'une de tes
applications web.
> http://www.xxxxx.be/winedowze/1.29/index.php?page=home&com=%2760
> SELECT auteur, titre, date, contenu, icon FROM live_news WHERE id = '60;
> You have an error in your SQL syntax; check the manual that corresponds
> to your MySQL server version for the right syntax to use near ''60' at
> line 1
Voila la faille, ta requète SQL n'est pas protégée contre les injections.
La variable « com » est directement concaténée sans contrôle et sans
échappement à un morceau de SQL, ici apparement
'SELECT auteur, titre, date, contenu, icon FROM live_news WHERE id = '
+ $_GET['com']
Tant que « com » est un nombre, pas de soucis…
SELECT auteur, titre, date, contenu, icon FROM live_news WHERE id = 60
Si « com » devient quelque chose de plus malsain, comme
60+UNION+ALL+SELECT+1%2C+2%2C+3%2C+4%2C+5+FROM+mysql.help_topic+WHERE+1+%3D+1
Boom…
SELECT auteur, titre, date, contenu, icon
FROM live_news
WHERE id = 60
UNION ALL
SELECT 1, 2, 3, 4, 5
FROM mysql.help_topic
WHERE 1 = 1
Et je te dump toute ta table mysql.help_topic…
HAVIJ est juste là pour automatiser l'injection et la remontée des
données des tables.
C'est ton appli qui est merdique au possible (en même temps, avec du
PHP…), pas MySQL sur ce coup-ci.
- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQEcBAEBAgAGBQJOc8yzAAoJEK8zQvxDY4P98BkH/i7KHpOwSZZBNX1jIDBeUTGL
MbqMfP2fJjt3GvCt3oL26cDtCnS/mdERc5nSbcB6pw5lXnZyH16DMM5OaHiMlLiI
xyiyNdlHDkLfE3Xu+b+AzoU8MbWmdC06oCnAmAz3Xdy6hf1CKoVp2z+6nIMyJbWh
g5QannBxgaUQ/2pOq0W7wITkyV2r9J2CvDkeM1/BbuQ33ob9B91VuvnQETpQyV06
Yvx6ZWSDz6cDrP/XZgOtHgKELwKhceMSq6/TbBCGmS7etrNh8pqawEPsdMaTvW4a
Bo1T2NlNQaWsmblVdS8HspwLTDaeQArgrtN92JoCKgZuEbIlFU8ooDDUIaMjstk=
=5ptw
-----END PGP SIGNATURE-----
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/4e73ccb9$0$31301$426a...@news.free.fr
Le 17/09/2011 00:40, Jean-Yves F. Barbier a écrit :
> ben, d'après ce qu'il dit l'accès vers le svr mysql est ouvert (p3306)
Ce qui n'est pas recommandable effectivement, mais qui ne semble pas le
vecteur de ce piratage.
> ça n'est pas tout à fait vrai: disons plutôt tant que les programmeurs php
> ne contrôleront correctement ni leurs morceaux de code ni les droits des
> fichiers & directories.
Certes, mais PHP ne fait rien pour inciter à du code propre et à de
belles applications.
Le cœur même de PHP est totalement délirant en matière de bonnes pratiques :
— API hétérogènes et mouvantes,
— Intégration d'une foultitude de « librairies » directement dans le core
— Paramétrage hérétique (magic_quote_gpc ><),
— Aucun respect d'une quelconque de normes de codage,
Même le PHP Engine n'est pas thread-safe et plombe Apache (pre-fork au
lieu de worker) ou incite à l'ultra-crade-pas-sécurisé (fast-cgi).
Comment espérer des applis correctes quand l'environnement dans lequel
elles vont tourner est moisi jusqu'à la moëlle ?
> Mais au risque de me répéter, la meilleure parade reste d'inclure le code
> "actif" dans la DB (procs stockées); mais je doute qu'à ce jour ce soit facile
> (voire même possible à 100%) avec mysql.
C'est extrème comme solution, et totalement innapplicable sur une
application digne de ce nom, que cela soit en PHP ou non et MySQL ou non.
Tu imagines le nombre de stored-proc nécessaires ? De toutes les
variantes de paramètres et/ou de sorties différentes ?
Du coût monstrueux de maintenance d'un tel système ?
Et qu'une telle application serait figée dans le marbre à jamais, toute
évolution future étant vouée à l'échec ?
- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQEcBAEBAgAGBQJOc9awAAoJEK8zQvxDY4P9hKUIAJcxOLzRUU1Cz5GkFrKnVarb
W7qAkn5/QV0GvlWQSeLH7upVqsjbJVqr05X4y03+oLTXx6tzi/Rxk2CDsVrfnab7
AiH47O0U3RbFEge/Qm4wODD6rf/eoUrujVMJSUVRMMwmk2f37Sp5ilOkVqCqXi2p
MpXBSmAcMQiMRjTwdEKI+URBEIcfgrVjwQf6iYzhNzXzjfqFiZT83vzIC+v0XKT1
GHo2xpw4JGRAeqWEtxItGYQ6ejCOKqQ4U/28+E9Fqs4b9aGp+Y9UEKhbwic4kPVv
T47b3UJHKvlXy4utpz810zM2oq+O32ElUYE+oSUzsYOV6J6J9tDukD6odj9pdV8=
=9KYH
-----END PGP SIGNATURE-----
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/4e73d6b5$0$11287$426a...@news.free.fr
Le 17/09/2011 03:20, Jean-Yves F. Barbier a écrit :
> Moins que tu ne penses: je bosse ces temps-ci avec des procs polymorphes qui
> effectuent elles-même leurs propres contrôles sur tables et colonnes
Je serais intéressé par un exemple, là comme ça je ne vois pas…
Comment peut-on gérer par procédure stockée le fait que les arguments
peuvent être variable (tri par date *OU* par nom), avoir des
comportements différents (nombre de post dans un topic, puis liste des
topics, puis liste des posts du topic joint avec la table des auteurs),
ou retourner des valeurs différentes (dans les cas précédents, un
nombre, une liste de topic, une liste de (post + auteur)) ?
Sans exponentiation du nombre de stored-proc et/ou de leur complexité,
j'ai du mal à concevoir…
> de l'autre on gagne une malléabilité énorme et l'abstraction par rapport
> aux données;
Là aussi, je bloque…
À la moindre modif des fonctionnalitées et/ou de la structure de
données, j'imagine assez mal comment on peut éviter un refactoring
monstrueux du nombre tout aussi monstrueux des stored-proc.
Par exemple avec l'exemple des topics précédents, le fait de rajouter
une date de publication à un post par exemple, nécessite a minima
d'ajouter encore X stored-procs pour pouvoir gérer les filtres et les
tris sur cette colonne, de refondre Y stored-procs pour ajouter cette
date en données de sortie, etc.
> La maintenance n'est pas plus lourde que pour un pgm en php, voire plus légère,
Si on arrive à m'expliquer les points ci-dessus, OK, pourquoi pas…
Pour l'avoir déjà expérimenté sur un projet où la contrainte cliente
était de n'avoir aucune requête dans le code mais tout dans les
stored-procs, ça a été un échec total déjà sur la 1ère version du soft
(de mémoire, on manipulait plus de 500 SP), et un cuisant Armageddon le
jour où on a du refondre les fonctionnalités et les données.
>> > De toutes les
>> > variantes de paramètres et/ou de sorties différentes ?
> Non: il est relativement aisé d'écrire une proc polymorphe qui ne retourne que
> les colonnes autorisées (ou renvoie une erreur si pas d'autorisation).
Cf questions ci-dessus. J'ai du mal à me faire une idée de l'existence
de telles SP.
> Pas plus que des centaines de petits morceaux de code d'un pgm en php, voire
> même moins puisque chaque proc a une fonction bien déterminée (quitte à avoir
> un peu de redondance dans le code afin d'éviter le morcellement).
Et donc à balayer d'un revers de la main toutes les bonnes pratiques de
développement…
> Je ne comprends pas ta vue de la chose: quelle différence vois-tu entre greper
> dans des centaines de bouts de code php pour s'y retrouver et modifier ces
> morceaux comme voulu, et modifier directement une ou des procs stockées dans
> la DB?
En PHP, je ne dis pas, mais même dans ce langage, un programme « bien
conçu » (3-tiers, MVC, template, séparation forme/contenu…) est assez
facilement maintenable et évolutif.
> À part les langages différents et surtout le fait que le contrôle total
> des données soit dévolu à la DB et non-plus à du code externe, je ne vois pas
> où se trouve le différentiel de maintenance.
Il se trouve aussi du côté des outils.
Si je développe en Java, j'ai des outils de refacto automatique, de la
complétion automatique, des navigateurs de code…
Choses déjà passablement existantes en PHP (mais c'est possible) mais
carrément inexistantes au niveau BDD et SP.
- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQEcBAEBAgAGBQJOdHwGAAoJEK8zQvxDY4P9opAIAL9UFNJUGJFNTckN77ijOohT
r4L+l+DlGV0sLL0fxEsciHpdpc/DkFf3NGjvlZ5jxGqjJ2sKKVZB8MqV7qQ5SHyd
HONFra1Lf7oB+8aDffwUJIi9KZTx8TzXgshfWIDNkdMiGhr7a9o+Yd1b/mk02vui
wUJZoHsKylctGl5BRnGV+eguxRtpfkbU4wVGiSOzDct41bZBePn6UAQfa7lWyUWj
fC1gaybies2z7bIE1+kIzdofrVv3LVxAS8ZG4fVMw3JRXvwGcSUNLX58wt5B20hw
wNbn+7dWzP9mkI3fS9l7qwDdKwpxrTzrpXovKcf2v5gc90JJTD6n/Qnqpfd3qSA=
=VNgm
-----END PGP SIGNATURE-----
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/4e747c0b$0$973$426a...@news.free.fr
Merci.
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/CAPrKK3CN-Hym9vVPbUuQULYc...@mail.gmail.com
Le 17/09/2011 14:50, Jean-Yves F. Barbier a écrit :
>> Je serais intéressé par un exemple, là comme ça je ne vois pas…
>
> Bien essayé, mais pas tant que je n'ai pas fini et publié mon projet.
OK, je m'attendais à cette réponse =)
> C'est pourtant relativement simple: ce que tu faisais dans php tu le fais
> maintenant dans la PS, avec juste qq lignes de plus pour gérer ce type
> d'indirection.
Pour moi, une PS, c'est ni plus ni moins que du SQL enrobé dans une méthode.
Si on commence à y intégrer du code métier, j'ai l'impression qu'on
s'éloigne très fortement de l'objectif des PS.
>> Là aussi, je bloque…
>
> Les données sont totalement inaccessibles de l'extérieur sauf pour le SU de la
> DB; seules les PS y ont accès, après contrôle des droits de l'appelant.
Oui, ça d'accord, mais les PS sont quand même ultra-limitées…
Elles ne supportent pas les arguments optionnels par exemple.
Comme je te l'ai mentionné, je ne vois pas comment on peut, via du PS,
arriver à faire ce genre de trucs (pseudo-code, et non sécuritaire je le
précise avant que ça n'hurle ^_^) :
function getTopics ( string[] sortOrders ) {
return "SELECT * FROM topics ORDER BY " + sortOrders.join(",");
}
Le fait d'avoir une requête SQL « dynamique » est pour moi en totale
contradiction avec le fonctionnement même des SP. Ou en tout cas, je ne
vois pas d'autres solutions que de faire :
function getTopics ( string[] sortOrders ) {
if sortOrders.is("date", "author")
return callSPGetTopicsOrderByDateAndAuthor()
else if sortOrders.is("date")
return callSPGetTopicsOrderByDate()
else if sortOrders.is("author")
return callSPGetTopicsOrderByAuthor()
else
return callSPGetTopics()
}
On voit bien l'explosion exponentielle du nombre de SP…
La seule solution que je puisse entrevoir serait de faire :
function getTopics ( string[] sortOrders ) {
return callSPGetTopicsGeneric(sortOrders)
}
ce qui reviendrait à faire descendre les contrôles de sécurité à la SP
au lieu du PHP, et en plus je n'ose trop imaginer la tronche finale de
la SP qui doit traiter TOUS les cas de requétage de l'application
(ordres de tri, colonnes remontées, jointures possibles (bonjour la
gestion de la sécurité avec les alias qui en découlent…), critères de
sélections…).
> Non, le travail est égal, à moins bien sûr que tu n'utilise des trucs de
> débutants comme SELECT * FROM matable au lieu de SELECT col1,col2,col6 FROM
> matable.
Certes, le « SELECT * » n'est pas recommandé. Mais il a l'avantage de
permettre d'être justement indépendant des SDD derrière : si je modifie
ma table source, je n'ai pas à modifier ma requète !
Le fait de limiter la clause SELECT :
— bride l'application pour toute évolution future
— demande X requètes/SP si j'ai la même « requête »-métier mais avec
dans chaque cas un besoin de colonnes de sortie différent
>> Par exemple avec l'exemple des topics précédents, le fait de rajouter
>> une date de publication à un post par exemple, nécessite a minima
>> d'ajouter encore X stored-procs pour pouvoir gérer les filtres et les
>> tris sur cette colonne, de refondre Y stored-procs pour ajouter cette
>> date en données de sortie, etc.
>
> Pas plus que dans du code extérieur.
Il est plus facile de modifier un fichier de mapping de l'ORM / modifier
ma classe de DAO / grepper dans mes fichiers PHP (dans l'ordre de
préférence) que de grepper dans une foultitude de SP.
Surtout que supprimer un champ dans une SP, ça va encore, « grep » le
verra. Mais difficile de grepper un champ qui n'existe pas encore parce
qu'on veut l'ajouter.
Et quid de la difficulté de s'assurer que les SP du serveur sont bien
celles attendues pour la version X, et pas celles de la version X-N ?
> Dans ce cas (comme dans les autres), il *FAUT* faire signer au client un
> cahier des charges exhaustif
Le cahier des charges était exhaustif pour chaque version.
On parle bien d'évolutions plusieurs mois après la mise en production.
Dans mon cas, il s'agissait d'un système de gestion de transactions
bancaires et l'évolution consistait à ajouter de nouveaux critères de
calcul (en gros des champs dans les tables, et là on a pleuré de ne pas
avoir mis de « SELECT * »…)
> - ET avant tout se rappeler qu'un pro a le DEVOIR
> (juridique!) de dire non à son client si ses desiderati sont farfelus.
À l'instant T0 de la signature du contrat, ils n'étaient pas farfelus.
À l'instant T0+18mois et 500 SP plus tard, ça l'est devenu un peu plus…
> J'ai souvenir d'un ami a qui le commercial a refilé un dossier; après (courte)
> analyse ce que voulait principalement le client se résumait à 30,000 hits à la
> seconde...
Cas classique, mais à la réponse à un appel d'offre et avant la
signature du contrat, il est souvent difficile de voir tous les futurs
points de blocage, d'autant plus que le client se gardera bien de te
signaler ceux qu'il a déjà anticipés, et que toi tu es pressé par les
délais (4 jours pour répondre à un appel d'offre de 1.000 pages).
> Ca m'a pris un temps fou en travail et réflexion pour trouver des solutions;
> donc comme dit plus haut, pas de comm tant que mon projet n'est pas
> terminé/publié (ce qui prendra le même temps... que le fût du canon pour
> refroidir:).
J'imagine bien =)
> Explique-moi la diff que tu vois entre entre des morceaux de php et
> différentes PS?
Physiquement parlant, il n'y en a aucune, tout n'est que fichiers au final.
« Métièrement » parlant, un monde sépare les 2, d'autant plus si on sort
du monde PHP.
Je peux par exemple m'appuyer sur la POO (héritage, polymorphisme,
généricité, abstraction…) pour limiter la duplication, centraliser
l'information, factoriser mon code…
Un exemple à la con : il y a de fortes chances pour que le nom de mes
tables se trouvent à un seul endroit dans mon code, quand chaque SP
devra dupliquer l'information. Idem si j'ai 2 requêtes « identiques mais
pas tout à fait », fortes chances d'arriver à factoriser tout ça au
niveau code quand les SP feront un gros copié/collé de derrière les fagots.
> Dans mon système, le MVC n'existe pas (en fait c'est la PS qui a ce rôle).
J'ai toujours du mal à voir comment.
Le but du MVC est d'obtenir une page quasi-HTML (ie. débarrasée de toute
présence de code métier) d'un côté et toute la récupération des données
de l'autre, de séparer la forme et le contenu en somme.
SP ou pas, ça n'a pas de rapport, ça ne reste que la partie M du MVC
(qui est ma DAO en JEE par exemple), il te manque encore toute la partie
C et V
> Par ailleurs je reste persuadé que l'archi 3-tiers est très loin d'être une
> panacée universelle; contrairement à ce que pense notamment la plupart des
> programmeurs, notamment web.
> Le 3-tiers est utile dans certains types d'applis bien particulières, pas dans
> toutes.
Ça se prête généralement pas trop mal à tout type d'application.
Le gros avantage du N-tiers est de permettre des évolutions (métier,
physique ou technique) très faciles.
Je change de moteur de base sans rien faire. Je remplace ma DAO JPA par
une couche web-service ou tes SP en 10min. Je scallabilise ma couche
service en 30 min.
> C'est comme pour les sites qui mettent 3' à charger la page de garde, ça n'est
> pas parce qu'on a un quadri-CPU en dev qu'on ne doit pas penser à ceux qui
> surfent avec un P3-500 - beaucoup, si ce n'est la plupart, devraient bien se
> rentrer cela dans la tête.
Certes, mais en même temps, quand tu tapes dans une table de 2To, pas
sûr que le temps de chargement du navigateur soit celui à prendre en
compte =)
> Evidemment, cela va à l'encontre de la mode actuelle où il faut pisser de la
> ligne de code au kilomètre et où bien souvent on ne se pose la bonne question
> que trop tard.
Là, le pissage de code au kilomètre, c'est clairement pas ma philosophie
non plus.
Je préfère 3 lignes qui fonctionnent, testées et validées, faites en 1
semaine, que 300 lignes hérétiques (que je me ferais une joie de
reverter !) en 2h !
- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQEcBAEBAgAGBQJOdKaiAAoJEK8zQvxDY4P9+mIH/2we5Pw+VyWBUE/dBH1Rfgce
78XJOZpWkSBH7Xlzqu+IYlyIq+Z/zRQ09jdm8mscPAhLlS4NINWBoeWoWNAHWZI2
n8axYjHAFvaGCbIkwt9h5GQpJdOjsaw3azjjBPQEfZdcDiWdNhYmAE3Tu8l/9z9Z
m4SXZ5OjOrPLE5oYOZBTU9oQUPxUUI0k195DrBlDCGboQ+3kk6qZOs1A7GrPienJ
y7x4fb/+81KrVn+vUIp5/NAajkl85PmXG/U+3xDgSyL1wc4/AXCyzs6WDXYKf2NT
rAprOSbDrOedvPyDpZSNY48aPsjxGy4LAk57up7jT+5alwVmwzx/r4vbNtxaytc=
=WY10
-----END PGP SIGNATURE-----
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/4e74a6a7$0$7286$426a...@news.free.fr
...
> Pour moi, une PS, c'est ni plus ni moins que du SQL enrobé dans une méthode.
> Si on commence à y intégrer du code métier, j'ai l'impression qu'on
> s'éloigne très fortement de l'objectif des PS.
Et c'est justement là que tu trompes: une PS ça *peut* être aussi simple qu'un
"SELECT col1,col2col3 FROM matable", mais c'est aussi et surtout capable de
beaucoup plus.
D'abord c'est écrit dans un langage structuré (SQL certes, mais aussi Pl/pgSQL,
Pl/Python, Pl/LUA, Pl/C, etc), c'est en prise +/- directe avec les données
(dépendant des droits d'exécution), mais c'est surtout intégré directement dans
la DB, donc ça dépend des mécanismes de contrôle de la DB qui
sont /sensiblement/ plus élaborés que ceux de php (au hasard).
Ca permet aussi de remplacer certaines VIEWs trop complexes à manier/modifier,
notamment en maintenance.
...
> Oui, ça d'accord, mais les PS sont quand même ultra-limitées…
Archi faux: il faut bien comprendre qu'une PS, c'est du code (et pas n'importe
lequel: primairement orienté DB).
> Elles ne supportent pas les arguments optionnels par exemple.
Encore archi faux: avec une PS on peut faire tout ce que l'on veut. Reste à
apprendre comment le faire ce qui n'est pas une mince affaire parce que
réflexion PGM ≠ réflexion DB.
J'ai mis presque une année à intégrer le fonctionnement, l'analyse et
l'application de tout ça à un résultat final parce que justement, même si ça
reste de la logique, elle est différent de celle de la programmation.
Ca n'est pas pour rien que les devs de gros projets sont complètement séparés
entre programmation et DB: ce ne sont pas les même métiers (un peu comme
Erlang est totalement alien à celui qui ne fait que du Basic).
> Comme je te l'ai mentionné, je ne vois pas comment on peut, via du PS,
> arriver à faire ce genre de trucs (pseudo-code, et non sécuritaire je le
> précise avant que ça n'hurle ^_^) :
> function getTopics ( string[] sortOrders ) {
> return "SELECT * FROM topics ORDER BY " + sortOrders.join(",");
> }
>
> Le fait d'avoir une requête SQL « dynamique » est pour moi en totale
> contradiction avec le fonctionnement même des SP. Ou en tout cas, je ne
> vois pas d'autres solutions que de faire :
> function getTopics ( string[] sortOrders ) {
> if sortOrders.is("date", "author")
> return callSPGetTopicsOrderByDateAndAuthor()
> else if sortOrders.is("date")
> return callSPGetTopicsOrderByDate()
> else if sortOrders.is("author")
> return callSPGetTopicsOrderByAuthor()
> else
> return callSPGetTopics()
> }
> On voit bien l'explosion exponentielle du nombre de SP…
Mais si on fait (tjrs en symbolique):
CASE 1:
RETURN SORTED BY Date
CASE 2:
RETURN SORTED BY Author
CASE 4:
RETURN SORTED BY Date AND Author
DEFAULT:
RAISE ERROR maPSamoi, "Illegal sort switch"
END CASE
on n'a plus qu'une seule PS.
> La seule solution que je puisse entrevoir serait de faire :
> function getTopics ( string[] sortOrders ) {
> return callSPGetTopicsGeneric(sortOrders)
> }
> ce qui reviendrait à faire descendre les contrôles de sécurité à la SP
> au lieu du PHP, et en plus je n'ose trop imaginer la tronche finale de
> la SP qui doit traiter TOUS les cas de requétage de l'application
> (ordres de tri, colonnes remontées, jointures possibles (bonjour la
> gestion de la sécurité avec les alias qui en découlent…), critères de
> sélections…).
D'abord il faut savoir si TOUS ces cas de tris ont une réelle légitimité...
Ensuite les contrôles de sécurité DOIVENT setrouver là où la sécurité est
justement maximale, en l'occurence dans la DB.
Et pour terminer, absolument rien n'empêche d'avoir une PS qui renvoie un set
de records qui elle-même appelle une autre PS pour effectuer un autre
traitement.
Encore une fois: OÙ est la différence avec du code php morcellé??
...
> Certes, le « SELECT * » n'est pas recommandé. Mais il a l'avantage de
> permettre d'être justement indépendant des SDD derrière : si je modifie
> ma table source, je n'ai pas à modifier ma requète !
> Le fait de limiter la clause SELECT :
> — bride l'application pour toute évolution future
> — demande X requètes/SP si j'ai la même « requête »-métier mais avec
> dans chaque cas un besoin de colonnes de sortie différent
C'est justement pour cela que j'appelle ça une erreur de débutant:
1- Rien dans les différents normatifs SQL ne garantie l'ordre de retour des
données (col1,col2,col3 ou col2,col3,col1 ou...) et c'est ce qui déconseille
formellement le '*',
2- Rien n'empêche d'avoir lesdites colonnes en paramètres de la PS,
3- À partir du moment où l'on a compris que la bonne syntaxe est de
nommer et ordonner les colonnes dans la requête, la maintenance d'un code
qu'il soit interne ou externe est strictement la même.
Encore une fois, c'est là que l'on voit les différences (profondes) entre
réflexion de programmation et réflexion DB.
...
> Il est plus facile de modifier un fichier de mapping de l'ORM / modifier
> ma classe de DAO / grepper dans mes fichiers PHP (dans l'ordre de
> préférence) que de grepper dans une foultitude de SP.
Dans l'état actuel des choses, un ORM est une ineptie - tout au plus peut il
servir lors d'une phase de mise au point.
Pourquoi en rajouter une couche (qui ralentit fortement l'ensemble) alors
qu'une bonne conception évite cela??
> Surtout que supprimer un champ dans une SP, ça va encore, « grep » le
> verra. Mais difficile de grepper un champ qui n'existe pas encore parce
> qu'on veut l'ajouter.
Comme dit plus haut, il suffit qu'il soit donné en parm à la PS.
> Et quid de la difficulté de s'assurer que les SP du serveur sont bien
> celles attendues pour la version X, et pas celles de la version X-N ?
Là, je ne veux pas être méchant mais si tu distribues une MàJ du code php sans
celle de la DB, faut changer de métier tout de suite: c'est un tout.
> > Dans ce cas (comme dans les autres), il *FAUT* faire signer au client un
> > cahier des charges exhaustif
>
> Le cahier des charges était exhaustif pour chaque version.
> On parle bien d'évolutions plusieurs mois après la mise en production.
Les prospectives AUSSI doivent être évoquées - et cela à tous les niveaux: que
cela soit avec les informaticiens locaux, les utilisateurs, les cadres et les
décideurs; c'est la seule façon d'obtenir une vue d'ensemble de la chose et
d'éviter les télescopages entre les désirs des uns et les impératifs des
autres.
Ca évite une bonne partie des mauvaises surprises futures.
> Dans mon cas, il s'agissait d'un système de gestion de transactions
> bancaires et l'évolution consistait à ajouter de nouveaux critères de
> calcul (en gros des champs dans les tables, et là on a pleuré de ne pas
> avoir mis de « SELECT * »…)
V. plus haut.
Et dans une PS, il est excessivement facile de renvoyer un champ calculé (pour
peu, bien sûr, qu'on ait les bonnes colonnes déjà existantes).
> > - ET avant tout se rappeler qu'un pro a le DEVOIR
> > (juridique!) de dire non à son client si ses desiderati sont farfelus.
>
> À l'instant T0 de la signature du contrat, ils n'étaient pas farfelus.
> À l'instant T0+18mois et 500 SP plus tard, ça l'est devenu un peu plus…
Là il ne peut y avoir que 2 poss: soit l'analyse a été mal faite, soit le
client n'a pas été clair (voire un peu des 2).
Pour ce qui est de la clarté, un client c'est comme un clébard: ça s'éduque;
une façon simple de faire est de lui expliquer que ce que LUI considère comme
une modif triviale peut prendre une semaine de boulot, alors que ce qu'il
considère comme extrêmement compliqué peut dès fois être réalisé en moins
d'une heure.
Mais dans le cas présent, je soupçonne fortement (et à priori) un défaut de
conception de la DB.
> > J'ai souvenir d'un ami a qui le commercial a refilé un dossier; après
> > (courte) analyse ce que voulait principalement le client se résumait à
> > 30,000 hits à la seconde...
>
> Cas classique, mais à la réponse à un appel d'offre et avant la
> signature du contrat, il est souvent difficile de voir tous les futurs
> points de blocage, d'autant plus que le client se gardera bien de te
> signaler ceux qu'il a déjà anticipés,
Les clauses réservatives sont là pour ça, d'ailleurs un contrat sur appel
d'offre ne devrait *jamais* être signé sans l'approbation d'un cabinet
d'avocat spécialisé.
> et que toi tu es pressé par les délais (4 jours pour répondre à un appel
> d'offre de 1.000 pages).
Et pourquoi pas 24H tant qu'on y est!?
Si vous répondez à n'importe quoi en 6 secondes 22 il ne faut pas venir se
lamenter après que le client n'a pas dit çi ou ça.
...
> > Explique-moi la diff que tu vois entre entre des morceaux de php et
> > différentes PS?
>
> Physiquement parlant, il n'y en a aucune, tout n'est que fichiers au final.
> « Métièrement » parlant, un monde sépare les 2, d'autant plus si on sort
> du monde PHP.
> Je peux par exemple m'appuyer sur la POO (héritage, polymorphisme,
> généricité, abstraction…) pour limiter la duplication, centraliser
> l'information, factoriser mon code…
O_o tu fais de la POO en php...
> Un exemple à la con : il y a de fortes chances pour que le nom de mes
> tables se trouvent à un seul endroit dans mon code, quand chaque SP
> devra dupliquer l'information. Idem si j'ai 2 requêtes « identiques mais
> pas tout à fait », fortes chances d'arriver à factoriser tout ça au
> niveau code quand les SP feront un gros copié/collé de derrière les fagots.
Et si le nom de la table n'était qu'un parm d'appel de la PS?
Voila une idée qu'elle est bonne! (et qu'elle permet de réutiliser la PS avec
d'autres tables).
> > Dans mon système, le MVC n'existe pas (en fait c'est la PS qui a ce rôle).
>
> J'ai toujours du mal à voir comment.
> Le but du MVC est d'obtenir une page quasi-HTML (ie. débarrasée de toute
> présence de code métier) d'un côté et toute la récupération des données
> de l'autre, de séparer la forme et le contenu en somme.
> SP ou pas, ça n'a pas de rapport, ça ne reste que la partie M du MVC
> (qui est ma DAO en JEE par exemple), il te manque encore toute la partie
> C et V
Quelle est la différence entre mettre en page du code qui vient d'une requête
en php et celui qui vient d'une PS; perso, j'vois pas (partie V).
Pour la partie C, elle est aussi incluse dans la PS.
> > Par ailleurs je reste persuadé que l'archi 3-tiers est très loin d'être une
> > panacée universelle; contrairement à ce que pense notamment la plupart des
> > programmeurs, notamment web.
> > Le 3-tiers est utile dans certains types d'applis bien particulières, pas
> > dans toutes.
>
> Ça se prête généralement pas trop mal à tout type d'application.
> Le gros avantage du N-tiers est de permettre des évolutions (métier,
> physique ou technique) très faciles.
> Je change de moteur de base sans rien faire. Je remplace ma DAO JPA par
> une couche web-service ou tes SP en 10min. Je scallabilise ma couche
> service en 30 min.
Moi aussi j'aime bien les Lego, mais c'est pas avec ça que je construirais ma
baraque...
Plus sérieusement, ces outils ont été développés pour des raisons et des
besoins particuliers, PAS pour être mis à toutes les sauces.
Chaque outil a ses propres spécificités; par exemple tu peux faire tout ce que
tu veux en N-tiers en matière de communications, mais je te mettrais toujours
une pallée en utilisant Erlang et en scalant mon système en 3 lignes de code
sur un nombre illimité de nodes en qq secondes.
La bonne question c'est: est-ce qu'utiliser ceci ou cela apporte vraiment de
l'eau au moulin ou est-ce juste un pis aller pour aller plus vite (en Gal au
détriment de l'évolution).
Un tout ch'tit exemple: tu dis "Je change de moteur de base sans rien faire"
sauf que chaque DB a certaines spécifités et que certaines, même hors normes
SQL, facilitent grandement la vie.
Un autre: ça ne me viendrait même pas à l'esprit ne serait-ce qu'envisager
d'éventuellement un jour peut-être de penser à mysql pour une appli sérieuse.
> > C'est comme pour les sites qui mettent 3' à charger la page de garde, ça
> > n'est pas parce qu'on a un quadri-CPU en dev qu'on ne doit pas penser à
> > ceux qui surfent avec un P3-500 - beaucoup, si ce n'est la plupart,
> > devraient bien se rentrer cela dans la tête.
>
> Certes, mais en même temps, quand tu tapes dans une table de 2To, pas
> sûr que le temps de chargement du navigateur soit celui à prendre en
> compte =)
Quand bien même la table ferait 2T *rows*, c'est juste une question de
conception correcte de la DB, de ses indexes, de ses PS et de ses requêtes
(considérant que le hard a été au préalable correctement dimensionné).
--
Is this really happening?
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/20110917174...@anubis.defcon1
Je plussoie cette remarque.
J'ai eu l'occasion de faire du Perl pour de la supervision (mon) et de
l'analyse de logs (issus de mon); on peut faire des choses propres,
ultra-rapides, avec des sorties en HTML nickel (passées au validator w3c
les doigts dans le nez). Pour les sorties achtéaimelle, j'ai en
particulier beaucoup apprécié le module CGI, pour lequel je n'ai pas
trouvé d'équivalent PHP ; on code en Perl, pas en HTML, et le module
fait le nécessaire pour retranscrire le tout proprement.
--
Nicolas
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/20110917181...@petole.demisel.net
...
> OK, mais on sort totalement du cadre des procédures stockées lambda…
Tout dépend de la conception de lambda; dans le cas présent, il s'agit de
répartir les tâches équitablement entre codes int/ext.
> Et entre mettre du code dans la db ou du code dans l'appli, pour moi
> c'est du pareil au même, et sauf à demander 2× plus de travail et de
> personnes, je n'en vois pas l'intérêt.
Chacun chez soi...
Autrement dit pourquoi chercher à gérer la sécu des accès au niveau applicatif
alors que c'est déjà intégré dans la DB!?
> Bien que je ne maîtrise pas ce que permet de telles SP au niveau
> sécurité DB, j'imagine assez mal ne pas pouvoir faire ce type de
> contrôle au niveau applicatif. Peut-être me trompé-je…
Avec l'apparition de Pg ≥ 9.0 le contrôle est devenu bcp plus fin (colonnes),
il me parait donc logique que la DB s'occupe du contrôle d'accès.
Par rapport à Oracle, il manque encore qq autres contrôles, mais à la vitesse
(ET surtout la qualité) à laquelle les devs Pg vont, je ne doute pas que d'ici
la fin de l'année prochaine on y soit.
> Et qui dit 2 sources de code dit 2× plus de risque d'erreur !
Nan: ça revient au même, la différence c'est que le code ext n'exécute plus
qu'un simple appel à la SP.
...
> > J'ai mis presque une année à intégrer le fonctionnement, l'analyse et
> > l'application de tout ça à un résultat final parce que justement, même si
> > ça reste de la logique, elle est différent de celle de la programmation.
>
> Gros problème que j'y vois : cette manière de penser (que j'imagine bien
> loin de tout standard SQL et reposant sur des API propres au moteur
> utilisé), est totalement non portable, réutilisable ou généralisable.
> Tu changes de moteur, ton année de travail aura été totalement vain.
C'est en partie vrai, mais depuis qq temps on observe une convergence, à mon
avis non-fortuite, entre Pg & Oracle; et il n'y a pas tant que cela d'autres
compétiteurs du même niveau.
C'est pour cela que j'essaye de penser hors des sentiers battus; la
portabilité c'est Tbien dans l'abstrait, mais encore faut-il:
* qu'il y ait un intérêt quelconque à éventuellement switcher,
* qu'il existe un moteur capable de rendre les même services.
* que ladite portabilité ne se fasse pas au détriment des perfs.
> > Ca n'est pas pour rien que les devs de gros projets sont complètement
> > séparés entre programmation et DB: ce ne sont pas les même métiers (un peu
> > comme Erlang est totalement alien à celui qui ne fait que du Basic).
>
> Euh, sur de gros projets, les DBA s'occupent de la structuration des
> données (schémas, indexes, configuration et paramétrage du moteur…), pas
> du développement…
Ben ceux que je connais sont en Gal aussi des devs, justement parce que c'est
une discipline très différente de la programmation proprement dite.
> > Mais si on fait (tjrs en symbolique):
> > CASE 1:
> > RETURN SORTED BY Date
> > CASE 2:
> > RETURN SORTED BY Author
> > CASE 4:
> > RETURN SORTED BY Date AND Author
> > DEFAULT:
> > RAISE ERROR maPSamoi, "Illegal sort switch"
> > END CASE
> >
> > on n'a plus qu'une seule PS.
>
> C'est effectivement la solution que j'envisageait.
> Mais dans une application classique, je pense que N tend plus vers 200
> que vers 5…
Même si N=300 ça ne pose pas de PB insoluble (surtout que dans Pg, une fois
passé le premier appel qui déclenche la compilation, c'est le pseudo-code qui
est exécuté).
> > D'abord il faut savoir si TOUS ces cas de tris ont une réelle légitimité...
>
> Dans une application « classique », oui.
> Par exemple dans les écrans de reporting et/ou de traçabilité.
Eventuellement pour la traçabilité, mais normalement si la DB est bien concue
ça se traite par une table 1-1-self (et par voie de conséquence, par des appels
récursifs à la SP).
Pour le reporting c'est une toute autre histoire, notamment dans les grosses
entreprises, parce que toutes les enquêtes montrent que chaque nouveau chef
vient ajouter son grain de… sable dans la machine pour prouver qu'il existe,
mais qu'au final moins de 10% des traitements de données (en Gal les
indicateurs std) servent réellement à qq chose dans les processus de
décision/optimisation.
> > Ensuite les contrôles de sécurité DOIVENT setrouver là où la sécurité est
> > justement maximale, en l'occurence dans la DB.
>
> Pas convaincu…
> J'ai l'exemple d'une de mes applis de gestion biométriques où les
> données nominatives n'étaient accessibles que par les admins du système.
> Une partie du contrôle des accès aux colonnes de la db était donc à
> faire au niveau applicatif !
Développe un peu plus parce que là je ne vois pas le tableau.
> > C'est justement pour cela que j'appelle ça une erreur de débutant:
> > 1- Rien dans les différents normatifs SQL ne garantie l'ordre de retour des
> > données (col1,col2,col3 ou col2,col3,col1 ou...) et c'est ce qui
> > déconseille formellement le '*',
>
> C'est pour ça que je n'utilise pas le positionnel, mais bien les champs
> nommés.
Ca n'est point ce que j'avions lû qq posts plus haut, gent damoiseau!:
"Certes, le « SELECT * » n'est pas recommandé. Mais il a l'avantage de
permettre d'être justement indépendant des SDD derrière : si je modifie
ma table source, je n'ai pas à modifier ma requète !" SIC
> > 2- Rien n'empêche d'avoir lesdites colonnes en paramètres de la PS,
>
> Ce qui ouvre la voie à de l'injection SQL ? =)
Pas du tout, il existe des mécanismes simples dans Pg pour se prévaloir de
toute possibilité d'injection par les parms d'une SP.
...
> > Dans l'état actuel des choses, un ORM est une ineptie - tout au plus peut
> > il servir lors d'une phase de mise au point.
> > Pourquoi en rajouter une couche (qui ralentit fortement l'ensemble) alors
> > qu'une bonne conception évite cela??
>
> Un ORM, c'est pas juste un bidule qui te connecte à la base…
> Ça t'apporte pas mal d'autres choses, comme les pools de connexion, les
> caches multi-niveaux, l'indépendance du moteur…
Si j'ai besoin de pools et/ou de cache(s), je vais les chercher
individuellement là où ils sont 100% fonctionnels et très performants, pas
dans une soupe où l'on trouve tout et n'importe quoi - souvent bricolés à la
va-vite sur demande pressante des utilisateurs.
...
> > Là, je ne veux pas être méchant mais si tu distribues une MàJ du code php
> > sans celle de la DB, faut changer de métier tout de suite: c'est un tout.
>
> Si le monde était aussi rose, ça se saurait depuis longtemps =)
> Et je peux très facilement vérifier que mon client a exactement les
> mêmes fichiers que moi en production (MD5), il en est autrement pour les
> SP potentielles sur le moteur…
D'où l'intérêt d'upgrader par package complet - sinon il suffit d'ajouter une
SP qui renvoie la version (mais ça reste une Tmauvaise solution).
...
> Un client a souvent du mal à définir son futur, surtout à 18 ou 30 mois.
J'entends bien, mais dans ce cas il faut être aussi clair dans l'autre sens:
soit il aura un soft très spécialisé et totalement adapté à son cas présent
(mais qui demandera plus de travail lors d'une évolution), soit tu lui fais
un truc extrêmement malléable avec ORM, N-tiers et tout le toutim, au
détriment complet des perfs (mais qui se modifiera très facilement).
A ma connaissance dans ce domaine, il est totalement impossible d'avoir le
beurre, l'argent du beurre et le cul de la fermière (cochonne qui a des gros…,
ha non, merde, c'est l'infirmière:)
> J'ai même dans mon entreprise des demandes d'évolution sur du soft de 30
> ans d'âge !
Je pense que ça mérite une analyse poussée au cas par cas; j'ai pu jeter de
temps en temps un œil a certains vieux softs qui étaient terriblement bien
faits, alors que d'autres étaient une vraie cata.
> > Là il ne peut y avoir que 2 poss: soit l'analyse a été mal faite, soit le
> > client n'a pas été clair (voire un peu des 2).
>
> Non, juste que tout faire en SP ne nous semblait pas impossible
> techniquement, et reste d'ailleurs même encore aujourd'hui complètement
> faisable.
> Le soucis est venu au cours du développement, quand on a commencé à voir
> le nombre de SP, avec X variantes de la même requête, mais avec plus ou
> moins de données sortantes, de critères de sélection ou de tri…
Apparemment mauvaise analyse dûe à une connaissance pas assez approfondie de
la DB utilisée.
> Les développeurs s'arrachaient la tête pour savoir si une fonctionnalité
> avait déjà été SPifié ou si le travail restait à faire, pour trouver
> telle SP qui devait être corrigée, ainsi que toutes ses variations
> potentielles.
Dans ce cas, fais les passer en AGILE ou XP - je ne sais plus lequel procède
par releases rapides, mais c'est un système qui a bcp d'avantages: release
when ready AND tested, puis ajouts de fonctionnalités par releases, jusqu'à
release 1.0
> > Mais dans le cas présent, je soupçonne fortement (et à priori) un défaut de
> > conception de la DB.
>
> C'était le cas en partie, mais la base avait été héritée d'un ancien
> système et on ne pouvait pas trop y toucher.
Ha haaaa, la vieille base qu'on ne peut pas toucher - un must du classique!
C'est aussi là que la préparation pêche: soit le client conserve sa base et il
encaisse *également* les inconvénients qui vont avec, soit il y a migration
et donc création d'une Nlle base.
Parce que si tu réponds oui à une telle demande, la première merde te reviendra
dans le museau comme un boomerang (les clients ont l'amnésie absolue quand il
s'agit de responsabilité).
Là encore, c'est une question d'analyse préalable - prendre un marché, c'est
bien, mais pas s'il doit se transformer en sables mouvants dès le dev.
> Et pour achever le coup des SP, la plupart des requêtes étaient
> dépendantes d'un fichier de conf (XML) qui définissaient les règles
> métiers (répartition fonction du client, taxes variables, frais,
> ristournes commerciales…).
Là encore c'est un défaut d'analyse: comment accepter des données externes
alors qu'elles auraient dû se trouver dans la DB?
Pour te donner une idée, même les tailles & positionnements des fenêtres de mon
projet sont stockés dans la DB.
Une fois que c'est fait, on définit une ligne de process par taxe/ristourne/etc
puis les SP qui vont bien, puis la SP qui chapeaute le tout (SI il y en a
vraiment besoin, par qu'il est facile d'automatiser ce type de traitement en
chaînant les SP d'une façon transparente).
> Le nombre de paramètres à passer aux SPs étaient effroyables (jusqu'à
> 300 paramètres pour la plus grosse de mémoire).
Ca me parait, là encore, relever d'une erreur de conception liée au §
ci-dessus.
> > Les clauses réservatives sont là pour ça, d'ailleurs un contrat sur appel
> > d'offre ne devrait *jamais* être signé sans l'approbation d'un cabinet
> > d'avocat spécialisé.
>
> Les clauses sont là, mais rarement appliquées.
C'est une erreur classique et désuette; par exemple, les tribunaux du fisc ont
établi que si tu fais allusion à une clause de délai de paiement dépassé sous
astreinte d'intérêts de retards ET qu'il y a retard ET que tu ne fais pas
jouer la clause, tu es redressable sur le CA non-généré (merveille de ce pays
de cons, dirigé par des incapables tout-puissants pour qui les entreprises
sont l'ennemi à abattre).
...
> > Et si le nom de la table n'était qu'un parm d'appel de la PS?
> > Voila une idée qu'elle est bonne! (et qu'elle permet de réutiliser la PS
> > avec d'autres tables).
>
> Et de redescendre l'injection SQL un poil plus bas…
Non, comme dit plus haut, il est facile d'éviter toute injection dans une SP
postgresql.
...
> > Pour la partie C, elle est aussi incluse dans la PS.
>
> Gné ?
> Ça devient limite de l'hérésie là…
> Le jour où je rajoute des écrans, je dois toucher à ma BdD ? Oo
Si les écrans demandent des données non primitivement renvoyées, oui - mais
c'est la même chose où que se trouve le code: il faut bien modifier qq chose
pour changer le résultat.
> > Chaque outil a ses propres spécificités; par exemple tu peux faire tout ce
> > que tu veux en N-tiers en matière de communications, mais je te mettrais
> > toujours une pallée en utilisant Erlang et en scalant mon système en 3
> > lignes de code sur un nombre illimité de nodes en qq secondes.
>
> Certes, mais qui pourra maintenir ton code derrière ?
> Non pas que je défende qu'on doit pouvoir refiler la reprise de code au
> premier venu, mais à l'inverse, s'il faut que la recrue mette la même
> année que toi à comprendre le langage / système…
Tu mets le doigt sur l'un des PBs majeurs actuels: on demande aux gus sortant
d'une école d'être immédiatement opérationnels, ce qui est une ineptie totale.
D'abord parce qu'il y a une culture d'entreprise à acquérir, et que ça ne se
fait pas en un jour (eg: certains chefs demande un reporting hebdomadaire,
d'autres journalier, et ceux qui ont compris font confiance à priori); et
ensuite parce que même avec des tas de stages ils ne sont pas obligatoirement
tombés sur les même cas.
ET, très contradictoirement, les entreprises ne veulent pas assumer cette
accoutumance à leurs us et coutumes.
Sans compter qu'une entreprise est comme un individu: elle ne peut pas tout
faire, surtout au jour d'aujourd'hui où l'on demande à chacun d'être un
spécialiste.
Alors la façon simple(iste) de se défausser, c'est de tout faire, un peu
n'importe comment, tout en générant un turnover important dans le personnel
qui n'en peut rapidement plus, ce qui va au détriment des propres intérêts de
l'entreprise.
Là-dessus je pense qu'un coup d'œil sur les manières de faire de nos voisins
Teutons en particulier (et Alémaniques en Gal) permettrait d'y voir bcp plus
clair.
> > La bonne question c'est: est-ce qu'utiliser ceci ou cela apporte vraiment
> > de l'eau au moulin ou est-ce juste un pis aller pour aller plus vite (en
> > Gal au détriment de l'évolution).
>
> Oui, à long terme.
> On sait d'avance que les évolutions seront nombreuses (surtout dans mon
> domaine principal, l'industrie), et les équipes très fluctuantes (SSII).
> Le soft se doit d'être abordable tout en étant suffisamment bien gaulé.
Alors il faut pousser le raisonnement à son paroxysme et utiliser tous les
outils dispos, de l'orm à la base olap, en passant par (sèpulnom) les bases
qui s'auto-reconfigurent par (re)design des flux métiers.
Mais le risque du manque de connaissance est là aussi bien présent parce que
ces outils sont tellement généraux qu'ils demandent des compétences très
particulières (et souvent directement liées au métier-client) lors de leurs
configurations.
> > Un tout ch'tit exemple: tu dis "Je change de moteur de base sans rien
> > faire" sauf que chaque DB a certaines spécifités et que certaines, même
> > hors normes SQL, facilitent grandement la vie.
>
> C'est pour ça que Hibernate définit la notion de dialecte et se base sur
> les API propres à chaque moteur (non pas comme certains le pense en se
> conformant à la stricte norme SQL).
> Il utilisera par exemple les serial et séquences de PostgreSQL au lieu
> de l'auto-incrément MySQL.
Je ne fais pas de java, donc je n'ai pas d'opinion sur Hibernate que je ne
connais que de nom; mais je me rappelle qd même avoir lû pas mal de flammes
dessus, notamment chez Pg.
> > Un autre: ça ne me viendrait même pas à l'esprit ne serait-ce qu'envisager
> > d'éventuellement un jour peut-être de penser à mysql pour une appli
> > sérieuse.
>
> C'est bien pour ça que je l'ai fait bannir de notre bureau d'études.
> Comme remplaçant, PostgreSQL !
Voila une chose qu'elle est bien!
Comme d'hab, il n'existe pas une solution mais une multitude de solutions
possibles pour un même PB - et je veux bien concevoir que dans le cas que tu
décris, ORM et autres aides forment une béquille qui a ses avantages et ses
inconvénients en fonction de l'angle d'observation.
Le seul bémol que j'y mettrais (mais ça n'est pas simple à faire, surtout
quand on a la tête dans le guidon) serait d'évaluer en profondeur chaque outil
afin de restreindre le choix aux "bons", ou tout du moins aux plus adaptés.
--
The chicken that clucks the loudest is the one most likely to show up
at the steam fitters' picnic.
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/20110917224...@anubis.defcon1
Le 18/09/2011 14:20, Jean-Yves F. Barbier a écrit :
>> Faut bien travailler parfois =)
>
> À n'importe quel prix (heu... perte)?
Certains soutiennent qu'il vaut mieux 10 ingés sur un truc qui ne
rapporte rien au final (coût salarial = X, facturation client = X) que
10 ingés en intercontrat (coût salarial = X, facturation client = 0) =)
> Tu devrais faire un blog avec tous tes déboires: on dirait du Victor Hugo,
> avec le client dans le rôle de Ténardier; et puis tu pourrais intituler
> les commentaires "la p'tite causette" ;-)
Ouaip, il risquerait d'être assez rapidement rempli je pense ^_^
> Je pensais naïvement qu'avec le temps les déboires des SSII s'étaient un peu
> atténués, mais je m'aperçois que c'est exactement le contraire.
Ben tant qu'on restera dans le fonctionnement actuel des appels d'offre,
c'est-à-dire un choix de prestataire fonction du montant du devis à 90%
de la décision, on aura forcément ce genre de problème.
Quand on signe enfin un contrat, le 1er réflexe au niveau technique,
c'est presque « Merde, on était moins cher que tout le monde, qu'est-ce
qu'on a raté ‽‽‽ » et d'aller au charbon pour tenter de connaître les
tarifs des devis de la concurrence et des infos pour savoir où on va se
faire niquer et qu'eux avaient vu.
À titre de comparaison avec l'Allemagne (où les achats refuseront
purement et simplement une proposition en dessous de l'estimation
interne et où la MOA est prêt à mettre plus de moyen à condition de
garanties fortes de tenir les délais) qui doit obtenir des taux de
dépassement de projet de l'ordre de 20%, en France on serait plutôt à 80%…
Le mode « forfait » est souvent vu par les clients comme un bon moyen de
se faire financer le projet par le prestataire, parfois avec des
méthodes douteuses, comme par exemple de faire miroiter de la régie ou
de la TMA à long terme si on mène le projet forfaitisé à son terme (quoi
qu'il en coûte au presta, et quelque soit le retard).
À ce sujet, je serais d'ailleurs intéressé par des retours d'autres
collègues de SSII (voire de clients, mais là j'ai des doutes d'en avoir
un jour !), parce que malgré que la situation me semble générale, il y a
une espèce d'Omertà là-dessus, et qu'au contraire tout le monde y fonce
tête baissée, par peur de la perte du client.
- --
Aeris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQEcBAEBAgAGBQJOdefTAAoJEK8zQvxDY4P9AQgIAJS4GFX1gNJU7CQnTx/tWgp1
62NJZZQu8bQ80HL8wHZRe9xN16wREAluOmb+AsWwRBwZvUK4RCHnfCBDABx1UYBQ
a4A0jrADV/6849V82iEInc5NeUj1/pdZmiojN22tpi/qMl4MtC8N2h5vs5SDTIV1
NOUtDNStSgmQWRiwnxOYekazQo4elkcBAPgfnFPEG5QnysIstsTzhyS4z4OrhCb2
i/l8rIbszxru6B4Slvp4C2Ufg9oYDmERjpKhg0nxdy5UZAjyDIbyuUJnIJfIda96
kCGsVbT1KdSvkM7tJrvD/GF1r4oB1x7BIenSuH7S/QcSoVqiKnQvC97UCpi3q74=
=Dg2C
-----END PGP SIGNATURE-----
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/4e75e7d9$0$15032$426a...@news.free.fr
...
> À titre de comparaison avec l'Allemagne (où les achats refuseront
> purement et simplement une proposition en dessous de l'estimation
> interne et où la MOA est prêt à mettre plus de moyen à condition de
> garanties fortes de tenir les délais) qui doit obtenir des taux de
> dépassement de projet de l'ordre de 20%, en France on serait plutôt à 80%…
Ta réflexion est intéressante et correspond à mes propres retours Allemands.
Il est d'ailleurs assez inique de constater que sur les 30 dernières années,
eux ont amélioré leur situation (les français, particulièrement, les disaient
lourds, lents, trop planificateurs et pas assez déhotteurs au pied levé) en
"piquant" de la spontanéité ici; alors que dans le même temps le trait
"système-D" des français s'est amplifié au point de devenir une caricature,
sans avoir rien retiré de leurs coopérations avec nos voisins d'outre-Rhin...
--
Horse sense is the thing a horse has which keeps it from betting on people.
-- W. C. Fields
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/20110918152...@anubis.defcon1
> > lo, c'est l'interface réseau loopback
> > localhost, c'est l'adresse réseau local (127.0.0.1, ::1, …)
> Mince, je vois pas la différence :(
>
> Pour moi, lo, c'est le nom de l'interface (comme eth0) et localhost
> c'est l'adresse de cette interface. (http://tldp.org/LDP/nag/node66.html)
>
> Me gourre-je ?
Non, mais tu devrais te relire plus souvent, ça t'éviterais de te contredire
en 3 lignes.
--
Bringing your mate to a convention is like taking a game warden hunting.
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/20110920100...@anubis.defcon1