玻璃深加工管理系统构架分析
吴春福:杭州派尔科技有限公司 浙大CAD&CG国家重点实验室工学硕士 微软最有价值专家
[摘要]本文首先阐述了两层构架、三层构架的概念,然后对三层构架和两层构架深度分析,得出结论:两层构架系统,必然是不安全的。接下来文本深度介绍派尔管理系统的系统构架,并在本文最后,告诉用户如何简单有效地识别“真伪三层构架”
引文
目前,因为深加工管理系统操作界面复杂,并且要求有很好的互操作性,所以,目前国内市场上的玻璃软件都是采用客户段/服务端(C/S)结构的软件体系。在介绍系统构架时,软件提供商几乎都介绍系统是采用三层构架。经过笔者对几家玻璃管理软件的分析,截止笔者发文前,除杭州派尔科技有限公司的管理软件采用真正意义上的三层构架外,其他的几家都不是真正意义上的三层构架,而是两层构架。所以,笔者有必要把三层构架和两层构架的概念以及对两类构架进行对比,并告诉读者如何区分“真假李逵”。
一、 两层构架和三层构架概念
在介绍两层构架和三层构架前,我们有必要回顾一下管理软件的数据存取。为保证数据及时共享,所有数据都是存放在中心数据库,客户端访问服务器中的数据库来存取数据。如下图:
1. 两层构架
从上图可以看出,数据存放在数据中心服务器,客户端软件直接对中心数据库中进行读取和保存,这就是C/S最基本系统构架模式,也就是通常说的两层系统。也就是说,客户端直接访问数据库的系统,为两层构架系统。
ERP经常要进行数据分析,从上图可以看出,如果要进行数据分析,要不放在客户端上进行,要不利用数据库本身的数据库分析功能,进行数据分析。
2. 三层构架
三层构架为避免两层构架的缺点(下文会对两层构架进行缺点分析),在客户段和中心数据库中间加上一层:业务处理层(下简称业务层)。如下图:
图2
从上图可以看出,客户端并不直接访问中心数据库,所有的数据存取,都是通过业务层,业务层再连接中心数据库。
举例说明一次查询订单的过程:
用户在客户端程序输入查询条件(比如说时间段),确认后将请求发送给业务层,业务层接到请求,分析请求内容,并构建数据库语句,到数据库提取数据,然后将数据发送给客户端。
对于玻璃管理系统,除了简单的查询,还有数据处理和分析。举例说明完工单审核的过程:
可以看出,客户端和业务层之间发送的数据量非常小。请求审核,发送“完工单号”,业务层处理完毕后,发送的可能为“审核成功”或“审核失败+失败原因”,最多在0.1K范围内。但是,业务层为了完成这个审核过程,要从数据库调出很多相关数据,数据量估计在10K左右。因业务层和数据库为同一计算机,直接内存操作,速度非常快。
由于业务层和客户端之间的通讯有自己设计和定义,所以可以进行压缩和加密传输。
二、 两层构架和三层构架对比
在对比前,我们同样以完工单审核为例。从上面两层结构可以看出,数据处理部分要不放在数据库,要不放在客户端。下面对这两种情况进行分析:
1)业务处理部分放在客户端,如下图
图中灰底部分为客户端。和上图对比,读者可以很清楚地知道,在进行一次完工单审核,需要从数据库取出大量的相关数据到客户端,并且客户端分析完毕后,再保存回服务器。
2)业务处理放在数据库(利用数据库本身的功能):避免了两层中传递效率低的问题,但是,数据库造成了非常大的压力,特别是进行复杂数据分析或数学运算时,更是如此。另外,所有的业务逻辑都通过存储过程来处理,如果系统需要升级换代,数据表结构需要更改(增、删、改字段),则相应存储过程无法自动同步更改,并且不提醒开发人员,只有等到用户使用时,才出现错误。这就是为什么有些软件公司产品改进速度慢,甚至发现一些也错误也不敢去改正的真正原因,因为一旦修改表结构,可能会带来非常多的潜在错误(三层构架可以通过ORM工具来避免此类问题)。
从上分析,笔者得出结论,两层架构性能上远远不如三层架构(特别是跨Internet应用),或数据库压力上要比三层架构大,系统稳定性差。
当然,这些都不是最重要的。最为致命的安全性。笔者在谈安全性前,先给出一个结论:两层玻璃管理软件系统,一定是不安全的;只要装了客户端的电脑,一定可以看到系统的所有数据,包括客户资料、成交价格等敏感信息。
客户端和数据库是直接通讯的,那么在获取任何数据前,必须告诉服务器数据库密码,和数据库进行通讯握手。
两层架构系统,常见的密码处理方式:
图5
不管通过多高级的加密方式,最终都必须在内存中解密成明文,然后数据库系统会通过自己定义的数据传输方式对数据加密,进行数据传输。然后,数据库自己定义的加密方式,不管多高级,多先进,然而,作为通用系统,“高手”纷纷进行研究,最后的结果就是“道高一尺,魔高一丈”,开发出连“菜鸟”都能破解的工具软件。目前,据笔者测试,SqlServer(7.0,2000和2005版)、Oracle、MySql,都能用此工具轻松破解出密码。也就意味着,只要在任何一台安装了客户端软件的电脑,通过工具,可以直接获得数据库密码,装一个数据库工具(比如说查询分析器),就可以登录数据库,获取任何数据(根本就不通过企业管理软件,所有权限控制全部失效)。
读者一定会问,为什么不按自己的方式进行加密,然后再调用数据库。原理很简单,如果数据进行了加密处理,数据库是无法识别请求。密码窃取工具软件也就是利用了这一点,根本就不用通晓管理软件的加密方式,只需在调用的时候进行窃取。
图1、图2和图5,红色粗线部分,表示的是采用数据库传输协议进行数据传递(包括数据库密码),图1、图2中的X就是数据库密码窃取工具的截取点。
读者可以仔细看下图2,业务层和数据库的通讯都在服务器内部完成,而业务层和客户端的通讯,可以自行定义加密方式。所以,数据库密码窃取工具根本就无成下手。
既然三层构架有那么大的优裕性,为什么所有的管理软件不会都采用三层构架?这涉及到管理软件需要调用大量的数据,特别是异构数据,需要制定自己的数据传输协议,是一件费时费力的事情。现在玻璃管理软件鱼龙混杂,利润低,这也很多厂商不愿意投入更多的基础技术研发上,而是更愿意去开发更快获得利润的软件模块上。
综上所述,三层构架和两层构架对比,优缺点如下表:
|
三层 |
两层 |
|
数据库处理业务 |
客户端处理业务 |
||
传输速度 |
最快 |
快 |
慢 |
数据库运行压力 |
小 |
大 |
小 |
数据库升级难度 |
小 |
大 |
小 |
数据安全性 |
强 |
差 |
差 |
开发技术难度 |
大 |
小 |
小 |
发现隐藏错误的时机 |
开发期 |
用户使用期 |
开发期 |
图6
三、 派尔系统构架深度介绍
本节笔者将以派尔玻璃管理系统8.X版,详细讲述良好设计的三层构架的核心部分:业务层和客户端的通讯。
图7
客户端第一次运行时,会提醒是否提交信息给服务器,授权人员确认后,信息保存在数据库中。提交的信息来源于硬件基本信息(CPU系列号+硬盘系列号+网卡号)。对于没有经过验证的客户端,根本就无法调用业务层。而数据传输通过加密和压缩,一方面保证了数据安全,另外一方面提高了传输速度。
所以,除非是授权人员自己失责,未认真核对信息,就进行开通,否则,系统是非常安全可靠的。
目前派尔互联网试用开通中,除非是有人冒充玻璃深加工企业让我司开通,否则是没有进入系统的可能性。
通过授信的方式,有一个很大的好处。假设某业务员离职,带走了原先在公司的笔记本电脑,授权人员只需要将那台笔记本的信息删除,该笔记本就无法再连接到系统。
上面多次提到业务层,业务层其实也是一个软件,和常规软件比,没有运行界面,效率更高,更稳定,以NT Service的形式进行运行。Windows一启动,业务层自动启动(无须登录系统)。业务层和客户端的通讯,只需要指定一个端口号,客户端根本就不需存在数据库名和数据库密码。
四、 如何识别“伪三层构架”
依据上面对三层构架和两层构架的分析,识别“真假李逵”就变地非常简单。两层构架,客户端一定要连接数据库,而三层构架就不需要。下面以SqlServer2000为例,列举两种简单方法(在服务器上操作):
方法一:数据库连接方式
因为三层构架可以做到数据库仅在服务器内部有效,所以,只需要开放Windows验证。如果将数据库安全性修改为“Windows验证”,所有客户端都不需要采用特定Windows账号登录Windows系统,客户端依然能正常连接到服务器,则是三层架构。
1) 启动企业管理器:开始菜单->程序->Microsoft Sql Server->企业管理器
2) (Local)->右键菜单->点属性
图8
3) 属性对话框->安全性,并按下图设置后点确定:
图9
方法二:通过防火墙禁用SqlServer端口
SqlServer2000通讯端口默认为1433。查看端口方法:在图9中点“常规”,然后点“网络配置”,弹出对话框如下图:
图10
选择TCP/IP,然后点属性可看到当前使用的端口号。
五、总结
本文重点讲述了两层构架和三层构架的概念,并从速度、安全性、开发难度等多角度分析了两者的区别,并以派尔玻璃管理信息系统为例,阐述了三层构架的数据传输过程,最后告诉用户如何区分一个管理系统是三层构架还是两层构架。
附:
1) 本文系派尔8.X版管理软件深度剖析系列文章,“看似相同,实则大不同”主题的第一篇。
2) 本文提到的数据库密码窃取工具,读者如有需要用于研究,可联系作者:bookwormzju@gmail.com 。
本文观点系作者个人观点,欢迎指正。