如何拦截SQL流量客户端

时间:2017-01-09 04:41:21

标签: sql-server

我想记录客户端应用程序发送到我无法访问的远程SQL服务器的所有SQL。我正在考虑某种可以记录和传递数据的客户端代理。它必须与客户端应用程序在同一台计算机上运行。

任何想法都赞赏。

2 个答案:

答案 0 :(得分:0)

默认情况下,SQL Server的协议TDS(“表格数据流”)未加密,因此可以使用简单的数据包转发器来代理SQL Server连接和拦截命令(及其响应)。

TDS协议规范可从Microsoft网站获得,您可以编写自己的代理,可以通过以下方式拦截命令:https://msdn.microsoft.com/en-us/library/dd304523.aspx?f=255&MSPPError=-2147217396

然而,这是一项艰巨的任务。如果您不需要捕获每个连接,则还有其他更简单的选项:

  • 如果您控制应用程序的源代码,则只需修改所有数据库操作即可拦截每个SqlCommand的{​​{1}}和CommandText值。
  • 您可以跳过编写代理,而是使用本机数据包捕获,您需要使用Parameterhttps://www.winpcap.org/
  • 您还可以使用SQL Server的分析功能获取所执行的每个命令的日志:What are the APIs used by SQL Profiler?

答案 1 :(得分:0)

您所看到的内容称为SQL Profiler 具体而言 - 您正在寻找一个API。

我自己从未使用过探查器的API - 但this one看起来很有希望 另外 - 请查看另一个示例的this问题。

如果您希望获得有关工作分析器客户端的印象,可以查看this答案。