论Access数据库安全对策
2010-04-05傅文明
傅文明
辽宁广播电视大学(沈阳110034 )
Access数据库是一个桌面关系型数据库,对于一些信息量较少的系统,选用Access数据库使得编程、使用、二嵌开发都比较容易。对于桌面型的数据库应用来说,Access数据库的安全机制已经可以满足要求,但从根本上来说,Access数据库的安全性设计是不完善的,需要详细分析数据库的安全漏洞,提出防范对策。
1 Access数据库系统存在的漏洞
1.1 Access数据库的解密隐患
由于Access数据库的加密机制非常简单,所以即使数据库设置了密码,解密也很容易。该数据库系统通过将用户输入的密码与某一固定密钥进行异或来形成一个加密串,并将其存储在*.mdb文件中从地址“&H42”开始的区域内。由于异或操作的特点是经过两次异或就恢复原值,因此,用这一密钥与*.mdb文件中的加密串进行第二次异或操作,便可轻松得到Access数据库的密码。基于这种原理,可以很容易地编制出解密程序。
1.2 由Admin用户引发的安全漏洞
Admin用户是Access系统的缺省用户,除非系统在安装后已经重新链接到了某个新的工作组安全系统上,否则将以默认的Admin用户登录Access。而微软将标记Admin帐户的用户ID号设成了一个固定值,这就意味着全世界的Access系统的Admin用户在Access中都是同一个用户。
1.3 工作组信息文件带来的安全隐患
Access有一个默认名为system.mdw的工作组信息文件,该文件存放了Access数据库的全部安全信息,包括用户账号和组账号。需注意的是,该System.mdw工作组信息文件是不安全的。因为在安装Access的同时,安装程序自动将默认的工作组定义在其创建的工作组信息文件中。在用户还没有使用“工具组管理器”指定其他的工作组信息文件之前,再次启动Access时,都使用默认的工作组信息文件。默认状态下原System.mdw工作组信息文件之所以不安全是因为它的工作组ID是空白的,任何人都可以获得该工作组信息文件定义的管理员账号,具有访问数据库的各种权限,安全隐患极大。
2 Access数据库系统安全漏洞的防范
2.1 通过编程改进Access数据库的加密算法
这里介绍一种在VB中设置Access密码的解决方案,用关键字ALTER DATABASE设置、修改数据库密码。使用该方法前,先设置对Microsoft ADO Ext 2.5 for DDL and Security库的引用,具体语法如下。
ALTER DATABASE PASSW0RD NewPassw ord OldPassword
第一次设置数据库密码时,使用 NULL关键字作为 AL-TER DATABASE语句中的OldPassword参数,其代码如下。
Dim ObjConn As ADODB.Connection
Dim strSetPassword As String′创建SQL串以初始化一个数据库密码
trSetPassword =″ALTER DATABASE PASS WORD NewPassword NULL;″
Set objConn=New ADODB.Connection′设置数据库的打开方式为独占
ObjConn.Mode=adModeShareExclusive′打开数据库,path为数据库的路径
ObjConn.Open="Provider=Microsoft.Jet.OL EDB.4.0;DataSource=Path;″′执行 SQL 语句设置数据库密码
ObjConn.Execute(strSetPassword)
修改数据库密码时,首先要用旧密码登录数据库,然后再更改密码。其代码如下:
ObjConn.Mode=adModeShareExclusive
ObjConn.Provider=″Microsoft.Jet.OLEDB.4.0″
ObjConn.Properties(″Jet OLEDB:Database P assword″)=″OldPassword″
ObjConn.Open″DalaSource=Path″′修改密码
strAltertPasswod =″ALTER DATABASE PA SSW0RD NewPassword OldPassword;″
objConn.Execute(strAlterPassword)
删除数据库密码操作类似于修改密码过程,只需使用NULL关键字作为ALTER DATABASE语句的NewPassword参数即可。
2.2 消除由Admin用户引发的漏洞
解决的基本思路是屏蔽 Admin用户对数据库的所有权限。首先,在Admin用户组中增加一个新的与 Admin用户等同的新用户(如www),然后以新用户登录 Access,从 Admin用户组将Admin用户撤出,并屏蔽掉Admin用户对数据库的所有权限,这样,Admin用户就成为了一个普通用户,实际的数据库系统管理员则变为新用户 www,而你的数据库安全系统就对所有的用户起到了防护作用。
2.3 消除由System.mdw文件带来的隐患
可使用工作组管理员程序对工作组信息文件进行管理。数据库管理员有权增加、删除组和用户,最好把开发同一项目的成员设在一个组。Access将用户归类到各种组中,所以数据库安全管理可极大简化,也就是为组而不是为单个用户指定权限,然后通过将用户添加到组中或从组中删除的方式来更改单个用户的权限。对于处于同组的用户授予新权限,只要执行一个操作,即可对该组账号授予新的权限。为了数据库的安全,要及时删除不再使用数据库的用户和组。
3 结束语
本文分析了与实际使用密切相关的 Access数据库系统安全漏洞,并提出了一定的防范对策,对于实践使用有一定的针对性和指导意义,在具体实施时,应根据具体情况、环境和需求,因地制宜进行分析,采取相应有效措施保护数据库系统乃至整个系统的安全。
[1]廖启亮,曾健思等. Access数据库加密系统安全性剖析及改进策略.中国安全科学学报,2008(5).
[2]郭丽. Access数据库的安全与防范.北京:清华大学出版社,2006.
[3]萨师煊.数据库系统概论.北京:高等教育出版社,2003.
[4]曾涛,黄净.Access数据库的安全机制、隐患及改进策略.大众科技,2006(7)