TDS是Sqlserver的通讯协议。如果了解TDS协议,在不加密的情况下就能做各种有趣的事:
- 截获所有客户端发来的Sql语句
- 获取所有结果集
- 特定语句的执行耗时
因为抓包完全与Sqlserver服务端独立,所以不会对性能造成太大影响,至少比开profiler好。事实上,由于加密不是默认选项,几乎没人多此一举去加密TDS,除非是远距离的通信,我几乎没遇到过。
在这样前提下,WireShark之类就有了用武之地。可惜的是,TDS不是完全开放的协议,尽管微软和Sybase都公布了一定资料,但许多还是遮遮掩掩的。目前的两份协议是:
带着悲哀的心情去读这些协议可能更好:
The TDS protocol comes in several varieties, most of which had not been openly documented because they were considered to be proprietary technology.
FreeTDS是一个开源的TDS实现,使得PHP、Perl、Python等能直接连到Sqlserver。最有用的两篇是:
User Guide是推荐先看的。协议了解的越多就能更加深入的看问题,从本质上认识东西尽管很痛苦,但一旦掌握,就可不受制于特定工具给的接口。这和为什么学TCP/UDP/IP协议的道理一样。在最困难的时候,它们才是最好的朋友。