• 玻璃深加工管理系统构架分析


    玻璃深加工管理系统构架分析

    吴春福:杭州派尔科技有限公司 浙大CAD&CG国家重点实验室工学硕士 微软最有价值专家

     

    [摘要]本文首先阐述了两层构架、三层构架的概念,然后对三层构架和两层构架深度分析,得出结论:两层构架系统,必然是不安全的。接下来文本深度介绍派尔管理系统的系统构架,并在本文最后,告诉用户如何简单有效地识别“真伪三层构架”

    引文

           目前,因为深加工管理系统操作界面复杂,并且要求有很好的互操作性,所以,目前国内市场上的玻璃软件都是采用客户段/服务端(C/S)结构的软件体系。在介绍系统构架时,软件提供商几乎都介绍系统是采用三层构架。经过笔者对几家玻璃管理软件的分析,截止笔者发文前,除杭州派尔科技有限公司的管理软件采用真正意义上的三层构架外,其他的几家都不是真正意义上的三层构架,而是两层构架。所以,笔者有必要把三层构架和两层构架的概念以及对两类构架进行对比,并告诉读者如何区分“真假李逵”。

    一、      两层构架和三层构架概念

           在介绍两层构架和三层构架前,我们有必要回顾一下管理软件的数据存取。为保证数据及时共享,所有数据都是存放在中心数据库,客户端访问服务器中的数据库来存取数据。如下图:

                         

     

    1.       两层构架

           从上图可以看出,数据存放在数据中心服务器,客户端软件直接对中心数据库中进行读取和保存,这就是C/S最基本系统构架模式,也就是通常说的两层系统。也就是说,客户端直接访问数据库的系统,为两层构架系统

           ERP经常要进行数据分析,从上图可以看出,如果要进行数据分析,要不放在客户端上进行,要不利用数据库本身的数据库分析功能,进行数据分析。

    2.       三层构架

           三层构架为避免两层构架的缺点(下文会对两层构架进行缺点分析),在客户段和中心数据库中间加上一层:业务处理层(下简称业务层)。如下图:

    2

           从上图可以看出,客户端并不直接访问中心数据库,所有的数据存取,都是通过业务层,业务层再连接中心数据库。

           举例说明一次查询订单的过程:

           用户在客户端程序输入查询条件(比如说时间段),确认后将请求发送给业务层,业务层接到请求,分析请求内容,并构建数据库语句,到数据库提取数据,然后将数据发送给客户端。

           对于玻璃管理系统,除了简单的查询,还有数据处理和分析。举例说明完工单审核的过程:

          

     

           可以看出,客户端和业务层之间发送的数据量非常小。请求审核,发送“完工单号”,业务层处理完毕后,发送的可能为“审核成功”或“审核失败+失败原因”,最多在0.1K范围内。但是,业务层为了完成这个审核过程,要从数据库调出很多相关数据,数据量估计在10K左右。因业务层和数据库为同一计算机,直接内存操作,速度非常快。

           由于业务层和客户端之间的通讯有自己设计和定义,所以可以进行压缩和加密传输。

    二、      两层构架和三层构架对比

           在对比前,我们同样以完工单审核为例。从上面两层结构可以看出,数据处理部分要不放在数据库,要不放在客户端。下面对这两种情况进行分析:

    1)业务处理部分放在客户端,如下图

     

    图中灰底部分为客户端。和上图对比,读者可以很清楚地知道,在进行一次完工单审核,需要从数据库取出大量的相关数据到客户端,并且客户端分析完毕后,再保存回服务器。

    2)业务处理放在数据库(利用数据库本身的功能):避免了两层中传递效率低的问题,但是,数据库造成了非常大的压力,特别是进行复杂数据分析或数学运算时,更是如此。另外,所有的业务逻辑都通过存储过程来处理,如果系统需要升级换代,数据表结构需要更改(增、删、改字段),则相应存储过程无法自动同步更改,并且不提醒开发人员,只有等到用户使用时,才出现错误。这就是为什么有些软件公司产品改进速度慢,甚至发现一些也错误也不敢去改正的真正原因,因为一旦修改表结构,可能会带来非常多的潜在错误(三层构架可以通过ORM工具来避免此类问题)。

           从上分析,笔者得出结论,两层架构性能上远远不如三层架构(特别是跨Internet应用),或数据库压力上要比三层架构大,系统稳定性差。

           当然,这些都不是最重要的。最为致命的安全性。笔者在谈安全性前,先给出一个结论:两层玻璃管理软件系统,一定是不安全的;只要装了客户端的电脑,一定可以看到系统的所有数据,包括客户资料、成交价格等敏感信息。

           客户端和数据库是直接通讯的,那么在获取任何数据前,必须告诉服务器数据库密码,和数据库进行通讯握手。

           两层架构系统,常见的密码处理方式:

     

    5

           不管通过多高级的加密方式,最终都必须在内存中解密成明文,然后数据库系统会通过自己定义的数据传输方式对数据加密,进行数据传输。然后,数据库自己定义的加密方式,不管多高级,多先进,然而,作为通用系统,“高手”纷纷进行研究,最后的结果就是“道高一尺,魔高一丈”,开发出连“菜鸟”都能破解的工具软件。目前,据笔者测试,SqlServer7.020002005版)、OracleMySql,都能用此工具轻松破解出密码。也就意味着,只要在任何一台安装了客户端软件的电脑,通过工具,可以直接获得数据库密码,装一个数据库工具(比如说查询分析器),就可以登录数据库,获取任何数据(根本就不通过企业管理软件,所有权限控制全部失效)。

           读者一定会问,为什么不按自己的方式进行加密,然后再调用数据库。原理很简单,如果数据进行了加密处理,数据库是无法识别请求。密码窃取工具软件也就是利用了这一点,根本就不用通晓管理软件的加密方式,只需在调用的时候进行窃取。

           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

    本文观点系作者个人观点,欢迎指正。
  • 相关阅读:
    【Java TCP/IP Socket】应用程序协议中消息的成帧与解析(含代码)
    【Java TCP/IP Socket】UDP Socket(含代码)
    【Java TCP/IP Socket】TCP Socket(含代码)
    Java NIO —— Buffer(缓冲区)
    java.nio.ByteBuffer 以及flip,clear及rewind区别
    Java文件IO操作应该抛弃File拥抱Paths和Files
    Java网络编程之InetAddress和URL
    Java enum的用法详解
    PAT Basic 1083 是否存在相等的差 (20 分)
    PAT Basic 1082 射击比赛 (20 分)
  • 原文地址:https://www.cnblogs.com/bookwormzju/p/1444083.html
Copyright © 2020-2023  润新知