关于Access数据库安全

原创 2004年07月21日 09:55:00

  今天再次看到Access数据库安全的文章,每次看到这种文章就想说上两句,流行说法有几种:
一、密码式
  给数据库起一个随机复杂的名称,避免被猜到被下载,这种方式在以前很流行,因为大家都对自己的代码很有自信。但随着错误提示对数据库地址的泄露导致数据库被非法下载,这种方式也就越来越少人用了。
二、"#"式
  在数据库名称里加上#号,从URL上请求时#是请求地址和请求参数的一个分隔字符,如果知道了数据库名,直接请求的话,如:http://www.xx.com/access#.mdb,WEB服务器会认为请求的是access而不是access#.mdb,所以会提示找不到文件,但是很遗憾,URL中对于这些特殊的字符都会有一个特殊的表示方式,#的特殊表示就是%23,如http://www.xx.com/access%23.mdb,那么access#.mdb将会被下载。还有如果用FlashGet之类的下载工具也可以直接下载。
三、ASP式
  这种作法是比较专业但也是很安全的也是现在比较流行的作法,但是现在许多的人只是作了一半,只是将数据名改成ASP而以,这样的话直接用FlashGet之类的下载工具一样可以将数据库下载,这种方式的正确作法有两步:
  第一步:在数据库内创建一个字段,名称随意,类型是OLE对象,内容设置为单字节型的"<%",即(ASP代码chrB(asc("<")) & chrB(asc("%"))的运行结果)
  第二步:将数据库改名为ASP
  这样从URL上直接请求这个数据库将会提示"缺少关闭脚本分隔符",从而拒绝下载,因为这个方式比较麻烦我在网上找了一段小代码来完成OLE对象的插入工作,只要将数据库名设置好,然后放在和数据库内一目录运行一下就可以了。
  代码全文数下:
<%
db="d.mdb" '这里改成您的数据库地址
set conn=server.createobject("Adodb.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db)
conn.open connstr
conn.execute("create table notdownload(notdown oleobject)")
set rs=server.createobject("adodb.recordset")
sql="select * from notdownload"
rs.open sql,conn,1,3
rs.addnew
rs("notdown").appendchunk(chrB(asc("<")) & chrB(asc("%")))
rs.update
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
  这段代码运行完之后将会在数据库内生成一个nodownload表,表内字段是notdown。如果数据库内已有同名的数据表存在请将代码内的nodownload改成自己想要的数据表名即可。
四、asa式
  这种方式的真谛是利用IIS对ASA文件的保护,从而使得数据库文件不能从URL上直接请求下载,但是这种方式被误解成只要将文件后缀改成ASA就可以了。要知道IIS只是对global.asa这个文件名有请求保护,所以这种方式只能将数据库名设置为global.asa,而且要注意的是,设置成global.asa之后最好不要将其放在主机或虚拟目录的根目录里,不然会被IIS当然正常的global.asa文件进行尝试运行的。

感觉第三第四种是比较安全的,除非IIS有查看ASP或ASA源码的漏洞,否则是无法将数据库下载的。

2006年1月1日补充:前段时间,我看了一篇黑客的文章,里面有一段说到Access的防下载<%,说是补一个%>即可让数据库直接下载,所以我建议大家写入时直接写入<%response.end%><%这样,即使被加成了%>数据库也无法被完整的下载下来。相对来说就更安全了,这个装置我已经写在了我写的小工具《Access数据库防下载设置工具》里了。如果有兴趣的人可以搜索一下提供下载的地方。今天刚刚写不知道这个东西会不会流传..不过,我相信,好东西一定会有人用的,祝大家在今年好运:)

关于Access数据库安全

今天再次看到Access数据库安全的文章,每次看到这种文章就想说上两句,流行说法有几种:  一、密码式    给数据库起一个随机复杂的名称,避免被猜到被下载,这种方式在以前很流行,因为大家都对自己...
  • u014739757
  • u014739757
  • 2014年04月24日 09:33
  • 397

c# 操作ACCESS数据库

c# 简单操作ACCESS
  • nanxizhu
  • nanxizhu
  • 2014年11月06日 20:10
  • 2217

Qt操作Access数据库

Qt为数据库访问提供QtSql模块实现了数据库与Qt应用程序的无缝集成。QtSql模块使用驱动插件与不同的数据库接口通信。Qt自带有QODBC驱动,通过windows平台上提供的ODBC驱动访问支持O...
  • Zhangchen9091
  • Zhangchen9091
  • 2014年09月27日 09:36
  • 747

Asp.net_连接Access数据库

今天一个朋友让我帮忙做一个asp.net的小网站,需要用到得是access数据库。一直以来,学习web开发,都是用sql server或者是mysql。虽说access数据库简单易用,但是没用过,去做...
  • zlfxy
  • zlfxy
  • 2013年04月10日 12:54
  • 9164

vb.net合伙数据库access(一)——连接数据库

终于在花了一个四个小时的时间完成了数据库与vb.net的合伙连接的第一步连接数据库,在这个过程遇到了问题,而且也是出现了一些刚刚接触的新的词语和观念,很新鲜,不过无论怎么样,最终也是给解决了,还是有一...
  • changyinling520
  • changyinling520
  • 2016年01月05日 19:07
  • 2288

access2007设置用户与工作组的管理与权限

设置工作组,是为了分配和管理权限的方便,可以将用户划分分配到工作组,然后对工作组授予权限,而不用一个个的对用户授权。默认的管理员组和用户组,一般就已经可以满足使用了,默认都拥有全部权限。管理员组的SI...
  • yuanyuan_186
  • yuanyuan_186
  • 2013年02月21日 23:40
  • 3557

远程访问Access数据库

远程访问Access数据库
  • TaoYuanKuangDao
  • TaoYuanKuangDao
  • 2017年05月05日 10:57
  • 989

jsp 连接 Access 数据库 程序测试

  • hanshileiai
  • hanshileiai
  • 2014年06月19日 23:48
  • 1219

C#access数据库查询操作(一)

数据库有增,删,改,查等操作,但在实际数据库的应用过程中,查询实际上是应用的最多的一种对数据库的操作方式。 1.首先要说一个问题就是,在数据库的定义过程中,表里的字段的数据类型强烈建议按照数据类型定义...
  • pengshupan
  • pengshupan
  • 2016年04月20日 17:17
  • 4436

Access数据库从入门到进门——应用篇

Access数据库自身提供了非常强大的VBA编程,可以很方便的开发小型软件,具体的使用方法请查阅相关资料。但是,对于我们而言,在软件开发过程中,都采用三层架构的开发方法,使用不同的编程语言,所以,遇到...
  • why15732625998
  • why15732625998
  • 2016年04月27日 21:01
  • 1303
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于Access数据库安全
举报原因:
原因补充:

(最多只允许输入30个字)