来源:中国一卡通网 作者:张国祥,舒玉坤 发布时间:2012-06-25 09:24:21 字体:[大 中 小]
摘 要: IC卡收银系统的数据库是从事收银程序共享的结构与数据,数据库设计的好坏直接影响系统中各个环节处理的性能和质量。传统的软件工程忽视对应用程序中数据语义的定义和抽象,仅仅只对数据模型和建模方法进行研究,着重结构的设计,而忽略行为设计,更为科学的方法是把数据和功能的分析相结合进行设计。
0 引言
在总结信息资源的开发、管理和服务的各种手段时,人们认为最有效的方法是数据库技术,数据库的应用已越来越广泛,它是衡量一个国家信息化建设程度的重要标志之一。我国“金卡工程”的目标是要实现信用卡处理的自动化、电子化和网络化,而这个大型系统工程的建设必须建立在安全、可靠、稳定的基础之上。本文论述了IC卡收银管理信息系统的数据库的设计以及提高数据库安全性与应用程序安全性的措施与方法,具有一定的实用性。
1 IC卡数据库的设计
IC卡收银系统的数据库是从事收银程序共享的结构与数据,数据库设计的好坏直接影响系统中各个环节处理的性能和质量。传统的软件工程忽视对应用程序中数据语义的定义和抽象,仅仅只对数据模型和建模方法进行研究,着重结构的设计,而忽略行为设计,更为科学的方法是把数据和功能的分析相结合进行设计[ 1 ]。
1. 1 库的设计
通过IC卡收银系统的需求分析,采用DFD数据流图表示处理过程与数据的直接关系,用数据字典说明预存储的数据,然后定义实体集、联系和属性,并将概念模型( E - R模型)转换成具体的DBMS能处理的关系模型,确定其物理存储结构,综合考虑索引、存取的时间、存储的开销与维护的代价等,最后利用DDL语言建立数据库的三级模式,装入试验数据测试、试运行等[ 2 ]。
1. 2 表的设计
关系型数据库是应用二维表来表示实体集合和属性的数据库系统的方法,二维表应遵循表格中每个信息项是一个不可分割的数据项,每一列信息项要求同一类型,每一列互不相同,行、列次序可以任意[ 3 ]。对二维表的规范采用范式来表示,满足最低要求的称为第一范式1NF, 在1NF中进一步满足一些要求的为2NF,各种范式之间有如下联系[ 4] : 5NF ∈4NF ∈BCNF ∈3NF ∈2NF∈1NF为了消除数据在插入、删除异常、修改复杂、数据冗余等方面的问题,有时需要进一步规范化,以便消除非主属性对码的部分函数依赖,消除主属性对码的部分和传递函数依赖,消除非平凡且非函数的依赖的多值依赖,消除决定因素非码的非平凡函数的依赖等[ 5 ]。
2 IC卡数据库的安全措施与方法
2. 1 数据库的安全性
数据库的安全性是保护数据库以防止非法用户所造成的数据泄密、更改或破坏,对于数据库的安全保密方法有物理处理和系统处理两种方法。物理处理是对于强力逼迫透露口令,窃听盗取存储设备等行为而采取的将数据加密为密文,加强警卫,保护存储介质等措施;系统处理则借鉴计算机本身逐级设置,主要体现在用户标示和鉴定、存储控制等。首先要访问数据库就必须通过数据库的一个用户,但每一个用户具有不同的口令,只有正确的输入用户名和口令,才可以和数据库进行正常的连接并访问数据库,当然,数据库的DBA可以强行更改任何一个用户的口令,用户可以定期的或不定期的自行修改,作为管理者拒绝远程的DBA的访问,可有效提高数据库的安全等级。其次,对于获权的用户,还要根据预先定义好的用户权限进行存取控制,保证用户只能存取它有权操作的数据,包括数据对象和操作类型。数据对象有两类,一类是数据本身,如关系型数据库中的表、字段;另一类是外模式、模式、内模式,它们均由DBA负责完成,一个非法入侵者即便获得了某个数据库的用户口令,而这个用户的权限有限或者根本没有什么权限,则不会对数据库造成多大的损害,从而保证了数据库的安全。
2. 2 数据库的完整性
数据库的完整性是指数据库的正确性和兼容性,它可有效的防止数据库中存在不符合语义的数据,错误信息的输入和输出所造成的无效操作和错误的结果。因此有必要用一定的机制来检查数据库中的数据是否满足规定的条件,即完整性的约束条件,它包括三种:一是值的约束和结构的约束;二是静态约束和动态约束;三是执行约束和延时执行约束。对于有些数据库, SQL 语言仅提供了安全性控制功能,但没有定义完整性的约束条件,我们可借鉴字段的有效性说明,以及定义触发器来进行完整性的约束检查,当发现违反了有效性的规定,系统自动发出警告,当某一事件发生后便触发Select语句,执行完整性检查。
2. 3 数据库的并发控制
数据库是一个共享资源,可以由多个用户同时使用,但如果不加控制,就会破坏数据库的一致性,并发控制就是要用正确的方法调度并发的操作,避免造成数据库的不一致性, 这种方法常用封锁(Lock)来解决。事务T( Transaction)可以向系统发出请求对某个对象加锁,于是事务T对这个数据对象就起一定的控制作用,其它事务就不能更改数据,除非事务T得到了解锁(Unlock) ,锁根据具体的功能分为排它锁( Exc lusive locks简记为X锁)和共享锁( Share locks简记为S锁) [ 5 ]。若事务T对数据库R加上X锁,则只允许T读取和修改R,其它事务对R的任何封锁请求都不能成功,直至T释放R上的X锁;若事务T对数据R加上S锁,则其它事务对R的X锁请求不能成功,而对R的S锁请求可以得到,这就保证了其它事务可以读取R但不能修改R,直至T释放S锁。
2. 4 数据库的备份与恢复
数据库系统可能会发生诸如事务内部故障、操作系统故障、介质故障、计算机病毒等故障,干扰甚至破坏数据库。数据库的备份是保证IC卡收银系统中数据库的数据安全的重要手段,它可以保证系统在出故障时,以及当用户误操作时,有效的恢复数据,常用的方法有:一是逻辑备份,就是将某个数据库的记录读出并保存到另一个文件中去;二是物理备份,将I 卡数据库完整转储,一旦发生故障,可以方便及时的恢复,把损失降低到最低。
3 程序的安全设计与策略
De lphiADO (ActiveX Data Object)是微软公司推出的一套数据库访问规范[ 6 ] ,它使应用程序通过一个OLE DB Provider驱动程序访问和操作数据库,它是一个基于COM的数据库访问规则和AP I函数的集合,以ActiveX组建的形式封装了OLE DB,具有速度快,占用内存少,直接使用AP I函数的特点;支持基于Web的应用开发;支持RDS (Remote Data Service) , 因此,具有广泛的应用[ 7~8 ] 。但是,应用软件的安全性是一个永恒的主题,如何设计安全可靠的程序是每个程序员必须思考的问题。
3. 1 通过IP检测与加密传输实现身份认证
身份认证是由用户通过客户端向服务器提交身份信息的过程,传统的方法是用户名与密码明文传输,事实证明,此方法达不到满意的效果。引入MD5 (Message - Digest Algorithm 5)信息- 摘要算法(RFC1828) [ 9 ] ,其过程是让大容量的信息在用数字签名软件签署私人密钥前被压缩成一种保密的格式,即把一个任意长度的字符串转换成一个定长的大整数,它以512位分组处理输入的信息,且每一分组又被划分为16个32位子分组,经过一系列的处理后,在将这4个32位分组级联生成一个128位的散列值。首先对信息进行填充,使其字节长度以512求余的结果等于448。因此,信息的字节长度将被扩展至N3 512 +448,即N3 64 +56个字节,N为一个正整数。填充的方法是在信息的后面加一个1和无数个0,直到满足上面的条件才停止用0填充,然后,在后面附加一个以64位二进制表示的填充前的信息长度,经过处理后,信息字节长度为N3 512 +448 + 64 = (N + 1) 3 512,即长度恰好是512的整数倍。数据填充好以后,把数据以512位为一个单位来分组,假如数据长度为K3 512位,则我们分为K个数据段,每个数据段有512位,再把每个数据段分为16个32位的子数据段,从低位往高位依次排号M0~M15。在MD5编码中,有四个存储32位整形参数的寄存器A、B、C、D。首先初始化这四个寄存器为A = 0x01234567,B = 0x89abcdef, C = 0xfedcba98, D = 0x76543210。然后开始进入算法的四步循环编码运算,循环的次数是信息数据段分组的数目,每一轮计算完后都要写入ABCD寄存器,并用于下一轮计算,一直到计算完毕,在寄存器ABCD中的数据就是所要求的MD5代码。
如把认证的帐号“adm in”和密码“207945”加密成MD5的值为:MD5Use rName ( ’admin’) =“21232f297a57a5a743894a0e4a801fc3”MD5 PassWord ( ’207945’) =“5c897360258d340f43dd58f3ffc54887”然后再和保存在认证服务器上的MD5值进行比较,来验证密码的正确性,通过这样的处理,系统在并不知道用户密码明文的情况下,就可以检验用户身份认证的合法性。这不但可以避免用户密码被具有系统管理员权限的用户知道,而且还在某种程度上增加了密码的破解难度,由于MD5算法具有加密单向性和数字指纹性的特点,在远程身份认证中使用MD5算法就能弥补传统模式的缺陷,从而提高了系统的安全等级。
同时,在服务端建立各用户的IP地址表,作为服务端在获取客户端的IP地址后,与自身IP地址表中各IP地址相比较,只有合法IP地址的用户才能作为用户输入用户名和密码进行认证的先决条件,如果用户的IP地址不满足,则输入用户名和密码的机会都没有,从而有效地提高了身份认证的安全性,减少了非法用户猜测用户名和密码的可能性。对于用户名和密码的输入,还要进行合法性的检验,不允许其中存在单引号、等号等特殊字符,以防止用户利用SQL语句的漏洞,跳过密码的验证。
3. 2 利用Delphi的容错机制提高软件的安全性
程序的容错处理就是在应用程序发生错误后,能够让应用程序转移到安全的地方,使系统恢复控制权或正常结束运行的程序,系统不至于崩溃或死机,并且尽可能地保存数据、将损失降到最低。De lphi为每个应用程序提供了一个默认的容错处理程序,Delphi的容错处理机制是建立在保护块的基础之上的,就是用保留字y和封装一段代码,其作用是当应用程序发生错误时自动创建一个相应的异常类,应用程序可以捕获并处理这个异常类,以确保程序的正常结束及释放程序占用的资源,确保数据不被破坏。Delphi的异常处理有4 种[ 6 ] 。
1) try ⋯ except结构;
2) try ⋯ finally结构;
3) ra ise结构;
4) nested exceptions结构。
异常的出现往往不可避免,优秀的异常处理将极大保证应用程序的安全性、健壮性和友好性,从而使应用程序得到加固。
4 结语
通过面向对象的分析与对象的确定,将数据的结构与行为的设计相结合,按照规范化的要求设计了IC数据库,确保了数据库的完整性和一致性;同时,通过容错确保了软件的安全性[ 10 ]。但是,过度规范化会降低数据库的性能,滥用容错,会使系统时间开销增大,如何寻找最佳的平衡点,是系统设计应追求的目标。
推荐文章
论坛热帖