侯思倩(同济大学)
摘要:数据库系统作为信息的聚集体,其安全性至关重要,如何有效地保证数据库系统的安全,已经成为业界人士探索研究的重要课题之一。本文分析了Access数据库系统常见的安全漏洞,并提出了防范对策,便于读者在实际应用中能够避免这些问题。
关键词:Access数据库漏洞防范
0引言
Access数据库是一个桌面关系型数据库,对于一些信息量较少的系统,选用Access数据库,使得编程、使用、二嵌开发都比较容易。对于桌面型的数据库应用来说,Access数据库的安全机制已经可以满足要求,但从根本上来说,Access数据库的安全性设计是不完善的,我们需要详细分析数据库的安全漏洞,提出防范对策。
1Access数据库系统存在的漏洞
1.1Access数据库的解密隐患由于Access数据库的加密机制非常简单,所以即使数据库设置了密码,解密也很容易。该数据库系统通过将用户输入的密码与某一固定密钥进行异或来形成一个加密串,并将其存储在*.mdb文件中从地址“&H42”开始的区域内。由于异或操作的特点是经过两次异或就恢复原值,因此,用这一密钥与*.mdb文件中的加密串进行第二次异或操作,便可轻松得到Access数据库的密码。基于这种原理,可以很容易地编制出解密程序。
1.2由Admin用户引发的安全漏洞Admin用户是Access系统的缺省用户,除非系统在安装后已经重新链接到了某个新的工作组安全系统上,否则将以默认的Admin用户登录Access。而微软将标记Admin帐户的用户ID号设成了一个固定值,这就意味着全世界的Access系统的Admin用户在Access中都是同一个用户。如果一个未联入你的工作组安全系统的用户在网络文件系统级别上获得了你的数据库系统文件的Admin权限,他将以Admin用户的身份拥有对该数据库系统的所有权限,而Access本身建立起来的第二级安全机制将不起任何作用,这种情况极易发生。工作组用户只要在他的计算机上重新安装一次Access软件,他将会轻而易举地避开你设置的安全防护,做为默认的Admin用户登陆并操作工作组中任何数据库系统。
1.3工作组信息文件带来的安全隐患Access有一个默认名为system.mdw的工作组信息文件,该文件存放了Access数据库的全部安全信息,包括用户账号和组账号。需注意的是,该System.mdw工作组信息文件是不安全的。因为在安装Access的同时,安装程序自动将默认的工作组定义在其创建的工作组信息文件中。在用户还没有使用“工具组管理器”指定其他的工作组信息文件之前,再次启动Access时,都使用默认的工作组信息文件。默认状态下原System.mdw工作组信息文件之所以不安全是因为它的工作组ID是空白的,任何人都可以获得该工作组信息文件定义的管理员账号,具有访问数据库的各种权限,安全隐患极大。
2Access数据库系统安全漏洞的防范
2.1通过编程改进Access数据库的加密算法这里介绍一种在VB中设置Access密码的解决方案,用关键字ALTERDATABASE设置、修改数据库密码。使用该方法前,先设置对MicrosoftADOExt2.5forDDLandSecurity库的引用,具体语法是:ALTERDATABASEPASSW0RDNewPasswordOldPassword
第一次设置数据库密码时,使用NULL关键字作为AL-TERDATABASE语句中的OldPassword参数,其代码如下:
DimObjConnAsADODB.Connection
DimstrSetPasswordAsString′创建SQL串以初始化一个数据库密码
StrSetPassword=″ALTERDATABASEPASSWORDNewPasswordNULL;″
SetobjConn=NewADODB.Connection′设置数据库的打开方式为独占
ObjConn.Mode=adModeShareExclusive′打开数据库,path为数据库的路径
ObjConn.Open="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Path;″′执行SQL语句设置数据库密码
ObjConn.Execute(strSetPassword)
修改数据库密码时,首先要用旧密码登录数据库,然后再更改密码。其代码如下:
ObjConn.Mode=adModeShareExclusive
ObjConn.Provider=″Microsoft.Jet.OLEDB.4.0″
ObjConn.Properties(″JetOLEDB:DatabasePassword″)=″OldPassword″
ObjConn.Open″DalaSource=Path″′修改密码
strAltertPasswod=″ALTERDATABASEPASSW0RDNewPasswordOldPassword;″
objConn.Execute(strAlterPassword)
删除数据库密码操作类似于修改密码过程,只需使用NULL关键字作为ALTERDATABASE语句的NewPassword参数即可。
2.2消除由Admin用户引发的漏洞解决的基本思路是屏蔽Admin用户对数据库的所有权限。首先,在Admin用户组中增加一个新的与Admin用户等同的新用户(如www),然后以新用户登录Access,从Admin用户组将Admin用户撤出,并屏蔽掉Admin用户对数据库的所有权限,这样,Admin用户就成为了一个普通用户,实际的数据库系统管理员则变为新用户www,而你的数据库安全系统就对所有的用户起到了防护作用。
2.3消除由System.mdw文件带来的隐患可使用工作组管理员程序对工作组信息文件进行管理。数据库管理员有权增加、删除组和用户,最好把开发同一项目的成员设在一个组。Access将用户归类到各种组中,所以数据库安全管理可极大简化,也就是为组而不是为单个用户指定权限,然后通过将用户添加到组中或从组中删除的方式来更改单个用户的权限。对于处于同组的用户授予新权限,只要执行一个操作,即可对该组账号授予新的权限。为了数据库的安全,要及时删除不再使用数据库的用户和组。
3结束语
Access数据库系统安全问题的分析研究是一项专业性、技术性极强而且复杂和庞大的工程,数据库技术不断发展进步,对于数据库安全防范技术的研究也将永无止境。本文总结分析了与实际使用密切相关的Access数据库系统安全漏洞,并提出了一定的防范对策,对于实践使用有一定的针对性和指导意义,在具体实施时,应根据具体情况、环境和需求,因地制宜进行分析,采取相应有效措施保护数据库系统乃至整个网络系统的安全。
参考文献:
[1]刘丽琳.浅析Access数据库系统的安全隐患及防范措施[J].和田师范专科学校学报.2007.(01):6-8.
[2]萨师煊.数据库系统概论.高等教育出版社.2003.
[3]郭丽.Access数据库的安全与防范[M].北京:清华大学出版社.2006.