2009-12-30 6 views
0

J'ai un déclencheur mysql qui se connecte chaque fois qu'une table spécifique est mise à jour.MySQL Triggers: Comment savoir quel script l'a appelé?

Existe-t-il un moyen de se connecter également à quel script PHP SCRIPT l'a déclenché? (sans modifier chaque script php bien sûr, cela irait à l'encontre de mon but)

De même, existe-t-il un moyen de consigner ce qui était l'instruction SQL juste avant la mise à jour qui l'a déclenchée?

Merci

Nathan

+0

Regardez dans vos fichiers journaux pour voir quels types de requêtes "volent" vers votre serveur. –

Répondre

0

non, mais vous pouvez obtenir une direction plus spécifique. Tout d'abord, si vous utilisez des connexions persistantes, désactivez-les. Cela rendra vos journaux plus faciles à utiliser. Deuxièmement, puisqu'il semble que vous ayez plusieurs bases de code accédant à la même base de données, créez un utilisateur différent pour chaque base de code avec exactement les mêmes droits et que chaque base de code se connecte avec un utilisateur différent. maintenant, quand vous regardez le journal, vous pouvez voir quelle application fait quoi. Troisièmement, si vous avez ouvert une session, le message UPDATE précédant immédiatement le déclencheur sera le UPDATE qui a provoqué le déclencheur. Quatrièmement, si vos applications utilisent une sorte d'encapsulation pour la connexion mysql, il devrait être trivial de la modifier pour écrire la pile d'appels au moment où une requête est envoyée à la base de données vers un fichier.

1

de réponses courtes: non et non. Pardon.

Qu'essayez-vous d'accomplir? Peut-être il y a une autre façon ....

+0

J'essaie d'enquêter sur une attaque par injection SQL en cours. Nous avons beaucoup de code à travers un lot de fichiers, en utilisant différents langages de programmation. J'espérais obtenir des indices quant à l'endroit où regarder ... –

+0

Je suppose que c'est une application web. J'essayerais de scanner le journal d'accès Web, de cette façon vous devriez avoir toutes les informations qui vous permettraient de dépister le problème. Vous pouvez également m'envoyer un email privé - [email protected] J'ai piraté quelques sites dans ma journée (chapeau blanc) et peut-être que je peux trouver le problème de cette façon. –

0

J'ai lu quelques-unes des réponses et des commentaires. J'ai eu une idée qui ne serait utile que si vos requêtes passent par un seul point. Par exemple, si vous avez une classe de base de données à laquelle toutes les requêtes sont exécutées.

Si tel est le cas, vous pouvez éventuellement ajouter un commentaire à la requête elle-même. Le commentaire inclurait la fonction call trace, et serait ajouté à la requête en tant que commentaire SQL.

Ensuite, vous devez activer la consignation des requêtes et être en mesure de voir à partir de quelle requête chaque requête est appelée dans le fichier journal.

Si vos requêtes ne passent pas par un seul point, il se peut que vous n'ayez pas de chance. Une dernière suggestion serait de regarder MySQL Proxy. Je ne l'ai pas beaucoup utilisé mais il est conçu pour faire un traitement intermédiaire des requêtes. Cependant, je pense toujours que vous auriez besoin de modifier vos scripts PHP pour transmettre des informations supplémentaires.

+0

Merci, malheureusement, nous n'utilisons pas une seule classe pour faire face à sql. Notre ancienne base de code est fondamentalement les appels les plus basiques, mysql_query() chaque fois que nécessaire. –

Questions connexes