好贷网好贷款

创新谈-许震

发布时间:2016-12-3 21:42:28 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"创新谈-许震",主要涉及到创新谈-许震方面的内容,对于创新谈-许震感兴趣的同学可以参考一下。

从事数据库工作这么多年,从数据库的教学,到后来从事数据库实施和开发,到今天从事技术咨询工作,遇到数据库类的项目不说上百也有好几十个了。在数据库应用越来越广泛的今天,几乎到了是个项目就有数据库的地步了。但这些项目几乎都是千篇一律和模式化,到了换一个名字又可以骗钱的地步(笑)。在自己经手的这么多数据库项目中找一个既要有“创新性”,还要有一定的“行业借鉴经验”,同时又具备一定的“应用难点技巧”,还真是不好找。突然发现,这么多年来,原来自己一直在技术上画圈,号称“咨询顾问”还真是汗颜啊。最后在自己的夹袋中翻来翻去,才找到一个不起眼的小项目算有点新意,勉强满足评委的要求,今天厚颜拿出来,算是抛砖引玉吧。 这个项目非常小,只是业余的偶然心得。具体情况是这样的,客户是一家外资保险公司,所有的网络浏览通过一个ISA Server 2004担当WEB代理,为了监控网络浏览行为,需要在ISA上实施实时的统计和监控。也就是说要用ISA实现一个Session Wall的功能。当然,现在有很多的的三方的工具可以实现这个功能,但是客户对于这个小功能不想进行任何额外的投资,就要用现有资源实现。最后七转八转就到了我的手上。 我分析了ISA的运行机制,ISA具备报表和日志功能。但是这个报表只能统计历史数据,而日志功能虽然是实时的,但是仅仅是每一个数据包的流水帐,作为ISA管理员的排错工具,没有任何可读性,也不能实时统计。但既然ISA可以进行历史数据统计,也可以实时记录日志,说明在内部机制上,ISA有条件进行实时的统计! 进一步分析ISA的运行机制,发现ISA将所有信息记录到了三种模式下:文本模式、MSDE模式和SQL Server模式。这些都是可以用数据库技术进一步处理的,尤其是默认的MSDE和SQL Server模式。只要是用了数据库技术,我就可以通过数据库自己的机制将数据显示出来。 对于数据的显示,我们一般通过编程可以采用CS模式、BS模式,而且微软在2004年以后,在SQL Server 2000中添加了一个强大的模块——报表服务。利用报表服务,可以定制报表的样式,管理报表的安全和运行,可以实现自动化的呈现和订阅,而且这个模块是免费的!另外我们知道,在SQL Server中还有一个自带的功能——数据的WEB呈现——也可以实现数据显示界面,而且这个功能可以实现自动化。由于Reporting Service实现比较复杂,所有客户pass了这个功能,最后就决定用简单的WEB呈现。 为了从ISA的后天数据库中显示数据,首先要了解ISA的存放数据库的格式。研究发现,ISA将用户上网的信息存放在两类表:ISAlog_yyyymmdd_FWS_XXX和ISAlog_yyyymmdd_WEB_XXX,分别代表了防火墙日志和web代理日志。其中yyyymmdd为日期,xxx为编号。而xxx编号没有一定的规律,每天都会产生新的表,但不一定是000或001的顺序,有时候会产生空表。为了保证查询语句访问的一定是当前ISA存放数据的表,使用了如下语句确定当前表名称: set @date=convert(varchar(8),getdate(),112) --将日期定义为yyyymmdd格式   select @db_name=[name] from master..sysdatabases where dbid in (select rsc_dbid from master..syslockinfo) and [name] like [email protected]+'_web%'   set @[email protected]_name+'.dbo.webproxylog'  --确定log表名称 这里用到了master..syslockinfo系统表,就是根据当前ISA写入数据要先锁定表的原理,判断所有锁定中符合yyyymmdd+web格式的表。 确定了表,就可以通过select语句来查询、统计需要的信息了。但由于ISA写入的信息有自己的格式,例如表(日志记录)里面的所有IP都是经过加权计算后的结果,例如2886729730,查看非常不直观,因此我们要做一点处理。 他的计算方法是这样,对于一个ip地址:a.b.c.d,result=a*256^3+b*256^2+c*256+d。因此我们要将一个加权值还原为IP地址的计算方法如下: a=abs(result/256^3) b=abs((result-256^3*a)/256^2) c=abs((result-256^3*a-256^2*b)/255) d=result-256^3*a-256^2*b-c*256 因此我们把这个计算公式做成一个函数就可以在查询中直接使用了。具体方法如下: se master go   if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ip]') and xtype in (N'FN', N'IF', N'TF')) drop function [dbo].[ip] GO   SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO create function ip(@in bigint) returns char(15) as begin  declare @a bigint  declare @b bigint  declare @c int  declare @d int  declare @ip char(15)  set @a=abs(@in/16777216)  set @b=abs((@[email protected])/65536)  set @c=abs((@[email protected][email protected])/256)  set @[email protected][email protected][email protected][email protected]  set @ip=ltrim(str(@a))+char(46)+ltrim(str(@b))+char(46)+ltrim(str(@c))+char(46)+ltrim(str(@d))  return @ip end     GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO 通过反复比较ISA自带的报表和日志,我们可以了解表中大部分内部代码代表的含义,通过类似上面的函数,可以将他们转换成用户可以理解的文字。完成了信息的转化和查询,就可以使用WEB呈现将查询结果显示在WEB页面中了。 在SQL Server中将查询结果转换成WEB页面的存储过程是sp_makewebtask,具体语法如下: EXECUTE sp_makewebtask @[email protected], @[email protected], @templatefile = 'c:/logview/isa.TPL', @dbname=N'master', @whentype=1, @codepage=65001,@charset=N'utf-8' 需要注意的是这个存储过程需要动态链接库XPWEB70.DLL支持,它在SQL Server 2000的系统目录中。 为了显示的数据更具备可读性,这里还用到了sp_makewebtask一个不常用的功能——模板文件TPL,这个所谓的模板文件实际是一个预先定义好的HTM文件。但在这个TPL文件的表格位置有特殊关键字<%begindetail%>和<%enddetail%>,还有<%insert_data_here%>用来表明显示数据时,查询结果的插入位置,具体格式如下:        <Table> <%begindetail%>               <tr bgcolor="#FFFFFF">                 <td><%insert_data_here%></td>                 <td><%insert_data_here%></td>               </tr>                 <%enddetail%>     </Table> 为了进一步控制显示的格式,在查询语句中也嵌入了HTML控制符,类似于下面的形式: exec('insert into temptable1 select ''<td><font size="2">''+convert(varchar(50),min(logtime),120)+''</font ></td>'' + ''<td><font size="2"><A href="http://''+desthost+''"</A>''+desthost +''</font ></td><td><font size="2">''+ convert(varchar(20),sum(bytesrecvd)) +''</font ></td><td><font size="2">''+ convert(varchar(20),sum(bytessent)) +''</font></td>'' from '+ @table_name + ' where clientusername [email protected]+''' and operation =''get'' and action =9 and logtime >(getdate()-1.0/24.0) group by desthost order by min(logtime) desc') 可以看出,嵌入了A href="http://''+desthost+''"</A>''+desthost这样的形式,由此产生的WEB页面上就带有超连接,连接的地址是从ISA日志中直接查询出来的。 通过以上的办法,将ISA日志里面的信息转化,通过查询统计出来结果,又通过模板的形式,将结果更好的显示出来。而且在显示结果中还嵌入了HTML控制符,添加了动态的功能。最终显示的结果如下图显示: 最后要解决的问题是,MSDE没有管理界面,因此所有的脚本利用OSQL命令执行,具体格式如下: osql -E -S isa2003/msfw -i 脚本.sql 以上功能的实现全部使用了SQL Server自带的功能,由于SQL Server的WEB任务比较简单,功能还有待进一步提高。但是不管是利用Reporting Service还是要自己开发类似功能的应用而言,本文中用到的很多技巧仍然有很大的借鉴作用。 本文看似一个ISA应用,实际用的全部是数据库技术。我写本文的目的也是希望能够给大家在数据库的应用上提供了一个新的思路,尤其是现在微软的很多产品都整合了SQL Server数据库技术——例如SMS、MOM、LCS、CRM等等,在这样的大趋势下,数据库工程师的应用场景将不再局限于数据库本身,很有可能成为跨领域的人才。利用我们掌握的数据库技术,深入挖掘其他产品的内涵,相信在大家的努力下,更多更好也更有意思的应用一定可以挖掘出来。 最后祝大家在数据库的海洋中开心遨游。         文章请同时提交信箱:[email protected]  [email protected]  

上一篇:学习CCNA的迷茫
下一篇:SAP所有用户出口列表(4.6C)

相关文章

关键词: 创新谈-许震

相关评论