如何防止Access数据库下载是一个很老的话题了网上的讨论也比较多在这里只是探讨ASPNET下防止Access数据库被下载的方法有些是对以前方法的总结部分是自己原创其中可能有不完善甚至不正确的地方欢迎大家指出一同进步
目前的解决方案主要有以下几种
把数据库文件放置到站点目录之外
设置存放数据库文件的IIS目录权限为不可读取(IIS信息服务管理>选择需要设置目录>右键>属性>目录选项卡>取消读取复选框)
采用ODBC数据源
以上三种方法都比较经典也比较安全适合能对服务器直接操作的情况(因为三种方法都需要直接操作服务器进行设置)当然这也是ASP平台下防止Access被下载的解决方案
ASP平台下还有一种解决办法那就是在数据库中添加一个长二进制表然后把文件后缀修改为asp(详情可参照动网论坛数据库的相应数据表)
将你的 Access 重命名 *asax因为 ASPNET 的处理机制中默认情况下对这样的请求是直接拒绝的并不会有思归提到的解析过程耗费资源等问题按照这个思路其实还可以把 Access 重命名为 nfig*vb *cs 等等
将你的 Access 放在你的应用程序根下 bin 目录(也就是你放置 DLL 文件的那个目录)中已经发现IIS 默认被配置为拒绝直接访问 bin 目录中的文件用以保护对 DLL 的请求事实上也同时保护了放在 bin 目录中其他文件但是对于这种方法有人提出疑问 会不会有这样的后果数据库读写时会造成程序集被频繁的刷新也会Session和Application不断丢失
(个人原创)另外一种方法是利用NET的访问权限控制达到禁止匿名用户下载数据库的目的具体如下
打开配置文件nfig在configuration节点下添加如下一段配置
<location path=DataBase>
<systemweb>
<authorization>
<deny users=* />
</authorization>
</systemweb>
</location>
DataBase是你的数据库文件存放目录如果是根目录则用<locateon path=~/databaseaspx>替换即可添加了上述配置后再把数据库后缀修改为aspx等需要经过IIS解析的文件类型即可
因为<deny users=* />语句限制任何匿名用户访问路径path=DataBase下的所有需要解析的文件
注意无论是ASP中还是NET下对于直接把Access数据库后缀直接改为asp和aspx或者在文件名前面添加#或文件名中加入空格用FlashGet照下不误