Question:
Affichage des transactions MSSQL entre une application source fermée et un serveur
jg0
2013-03-23 11:43:39 UTC
view on stackexchange narkive permalink

J'inverse une application héritée de source fermée qui utilise Microsoft SQL Server (2005) et j'aimerais savoir précisément quelles requêtes sont exécutées en arrière-plan.

Je comprends qu'il soit possible d'utiliser Wireshark pour afficher le trafic réseau, mais cela me semble assez maladroit donc je cherche quelque chose de plus spécialisé à cet effet.

Existe-t-il un outil similaire à les données de sabotage de Firefox, mais pour que MSSQL puisse afficher et éventuellement modifier les requêtes?

Fonctionnalités que je recherche:

  • Capable d'afficher les requêtes précisément telles qu'exécutées par l'application (y compris les blobs, etc.)

Des fonctionnalités qui seraient très utile:

  • Capable d'intercepter l'exécution de la requête et d'autoriser les modifications de la valeur
Deux réponses:
#1
+10
Peter Andersson
2013-03-23 12:40:57 UTC
view on stackexchange narkive permalink

La plupart des bases de données sont très conviviales pour le traçage et le profilage pendant l'exécution de la base de données. Vous devez faire très peu de rétro-ingénierie. Il existe un programme appelé SQL Server Profiler qui, je crois, peut vider chaque requête exécutée sur la base de données. Si vous n’avez pas accès au serveur, cela devient un peu plus compliqué.

Si votre application utilise ADO, vous pourrez peut-être utiliser Statement tracer for ADO.

Une manière plus complexe de faire ce que vous voulez dépend du type de couche de base de données que votre application utilise. Si la couche est basée sur COM (OLE DB l'est), vous avez deux options, soit explorer l'interface COM, soit créer un proxy COM. J'accrocherais probablement simplement les objets qui dérivent des diverses interfaces OLE DB ICommandXXX.

+1 (A) SQL Profiler est la voie à suivre. Notez que MS SQL Server Profiler n'est pas inclus dans les éditions Express, auquel cas vous aurez peut-être besoin d'un outil tiers tel que [celui-ci] (http://www.datawizard.com/)
Si vous souhaitez vous connecter à SQL Server vous-même, quelle fonction exportée intercepteriez-vous pour voir les requêtes sous forme de chaînes? Comme jg0 le dit, vous pouvez renifler les requêtes dans le cadre de l'ensemble du protocole. Le SQLDK.dll, SQLLANG.dll et SQLMIN.DLL contient un grand nombre de fonctions exportées, mais il n'est pas clair si en vous connectant à une spécifique, vous pouvez trouver la requête d'origine sous forme de chaîne. Il serait intéressant d'avoir cette alternative de surveillance.
Je ne connais pas les détails des fonctions exportées par le serveur SQL ou de leurs composants internes. J'ai tendance à être trop paresseux lorsqu'il s'agit de problèmes comme celui-ci et à suivre la voie de la moindre résistance.
#2
+3
0xC0000022L
2013-04-17 05:41:50 UTC
view on stackexchange narkive permalink

Il n'y a rien de mal à utiliser le décodeur de protocole TDS fourni avec WireShark, en supposant que la connexion est établie via quelque chose qui peut être reniflé par WireShark. Il s’agit d’un décodeur de protocole spécialisé pour TDS , donc je ne suis pas sûr de ce que vous entendez par:

Je comprends qu’il est possible de utilisez Wireshark pour afficher le trafic réseau, mais cela me semble assez maladroit, donc je cherche quelque chose de plus spécialisé à cet effet.

Si vous voulez vous salir les mains, vous pouvez écrire un proxy basé sur FreeTDS. Le plus gros problème semble peut-être que ce projet est maintenant mature ou abandonné. Le programme tdspool est probablement votre meilleur point de départ si vous souhaitez écrire un proxy. Mais il est possible que vous puissiez forcer jTDS à faire ce que vous voulez (à partir d'une lecture occasionnelle du code source, cela ne semble pas être un aussi bon point de départ que le programme tdspool ).



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...