带您理解带您理解SQLSERVER是如何执行一个查询的(上)是如何执行一个查询的(上)
正式开始
连接方式和请求
如果你是一个开发者,并且你的程序使用SQLSERVER来做数据库的话
你会想知道当你用你的程序执行一个查询的时候实际发生了什么事情
我希望这篇文章能够帮你写出更好的数据库应用程序和帮你更深入了解遇到的数据库性能问题
SQLSERVER是一个C/S模型的平台。唯一和数据库交互的方式只有发送包含数据库命令的请求到数据库服务器端。
客户端和数据库通信的协议使用一种叫做TDS的协议(Tabular Data Sream)
如果你用微软的Network Monitor工具来抓取SQL Server和客户端之间的网络包
你会看到使用的是TDS协议
在Description那一列
TDS:Response,Version=7.1......
TDS:SQLBatch,Version=7.1.......
那四个SSL连接是客户端登录SQLSERVER前做的加密连接(这里不管你有没有用SSL加密数据传输,SQLSERVER都会在登
录前加密
用户发过来的用户名和密码,而登录了之后才使用您配置的SSL证书来加密客户端和SQLSERVER往来的数据)
SQLSERVER都会加密客户端发过来的用户名和密码(使用SQL验证不是使用Windows验证)
大家可以留意一下SQL ERRORLOG里在SQLSERVER启动的时候的日志
会看到一句:A self-generated certificate was sccessfully loaded for encryption
默认情况下SQL Server会自动生成一个证书并使用这个证书来对客户端登录SQLSERVER的时候的连接做SSL加密
登录了SQLSERVER之后,就不会对连接/所传输的数据做加密了
而且SQL Server自动生成的证书。每次SQL Server启动时,它自动生成的证书都是不一样的
MSDN是这样描述的:Tabular Data Stream协议,应用程序能够使用下面的几种已经实现了TDS协议的驱动程序里的其中一
种
驱动程序来连接数据库,包括:
the CLR managed SqlClient
OleDB
ODBC