为了向用户提供数据,一个数据库必须使用一些媒介与用户交流,然而当数据库拥有越来越多可爱的用户时,交流就变成一件很困难的事情。因为这些用户可能使用不同的媒介进行沟通,比如用户A用TCP/Ip, 而用户B在数据库所在的机器上工作,使用共享内存的方式。为了解决这类问题就有了Net-Library抽象层,它向用户与数据库提供通讯服务,使得数据库不用关心具体的通信媒介。Net-Library包括客户端和服务器端。当用户需要与数据库通信时,她把数据送到Net-Library的客户端,由客户端发送到Net-Library的服务器端,当然实际的过程要比这复杂一点,因为还要经过加密处理。
好了,沟通渠道,这回有了,那么具体怎么沟通数据库才能给我想到的东西呢。Osamede又深入回忆了下,想起来一些东西。原来数据库就是我们院的一个教授,虽然热心,但也不会随便指点别人,首先我必须是他的学生(身份验证),其次他得为我备过课(分配资源)。
为了得到服务,客户端需要向数据库发送一个连接请求,请求中包括能验证身份的信息(客户端与数据库使用了一个应用层协议解析数据,具体细节隐藏在ODBC,OLE DB等等接口的driver中),引发数据库端的一个Connect event发生,触发 Open Data Services (ODS) 调用这个event的hander,判断请求中的用户信息是否有访问权限。如果用户具有访问权限,那么hander会允许用户建立一个与数据库的连接。这里ODS的脚色相当于一个 client manager ,是客户端和数据库服务进程的桥梁,当hander允许建立连接后,它会为用户分配输入输出缓存。
下面是一张图,From <<inside sqlsever 2000>>
SQL Server 2000's Net-Library Architecture