e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 数据库 >> Access教程 >> Access 2K/XP 数据库的最佳NTFS权限设置 >> 教程正文
 
教程搜索
 
 
相关教程
  • 将Excel数据导入Access
  • Access轻松实现多数据批量打印
  • 解决Access中分组报表的问题
  • 浅析Access与Office其他成员之间交流数
  • 远程连接access数据库的方法
  • Access数据库的一点经验
  • 防治Access宏病毒
  • ACCESS中使用SQL语句
  • 在ASP程序中访问Access数据库
  • Access使用查询--1.1. 用选择查询建立
  • 中文Access2000速成教程--1.1 使用“向
  • 将Access数据库移植到SQL Server
  • 中文Access2000速成教程--1.8 定义表之
  • 使用准则进行条件查询--1.3.运行查询前
  • Access使用查询--1.2.用选择查询进行分
  • Access使用查询
 
 

图文教程


  • Windows抢了谁的饭碗 非主流操作系统To

  • 地球还是火星 平常心看“非主流”

  • 综合运用Office 2007批量制作奖状

  • 没有系统盘如何才能修复受损系统?

  • 巧妙运用Excel中边界的附加功能!
 
 
赞 助 商
 
 
Access 2K/XP 数据库的最佳NTFS权限设置
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9

我们已经知道,ASP.NET 中使用 ADO.NET 访问数据库,通过 OleDb 的连接可以访问 Access 数据库——我们非常常用的低端数据库之一。本文讨论了 ASP.NET 中可能看到的若干错误提示,从中看到 Access 2000 和 Access XP 创建的数据库文件,在访问出现错误时会出现不太相同的错误提示。希望对大家有所帮助。另一个要点是,希望通过此文,使大家对 ASP.NET 中 Access 数据库文件的 NTFS 权限设置有所新的认识。

(一)实验过程

为了叙述方便,举个具体例子做个实验:应用程序为 /test ,数据库存放在 D:\wwwroot\test\data\db1.mdb,我们已经知道在 ASP.NET 中是以一个叫做 ASPNET 虚拟用户的身份访问数据库的,我们需要给这个账户以特定的 NTFS 权限才能使 ASP.NET 程序正常运行。

为了得到最严格的 NTFS 权限设置,实验开始时我们给程序最低的 NTFS 权限:

a) D:\wwwroot\test\data\ 文件夹的给用户ASPNET以如下权限:

允许拒绝

完全控制□□

修改□□

读取及运行√□

列出文件夹目录√□

读取√□

写入□□

b) D:\wwwroot\test\data\db1.mdb 文件本身给用户ASPNET以如下权限:

√ 允许将来自父系的可继承权限传播给该对象

1.1 对于某个只包含有“SELECT”命令的aspx程序,上述权限设置运行时无障碍,即:上述权限已经满足这类程序的运行了。

1.2 对于包含有“UPDATE”“INSERT”“UPDATE”等命令的aspx程序,

(a) 如果 db1.mdb 是 Access 2000 创建的数据库,出现如下错误:

“/test”应用程序中的服务器错误。

---------------------------------------

Microsoft Jet 数据库引擎打不开文件'D:\wwwroot\test\data\'。 它已经被别的用户以独占方式打开,或没有查看数据的权限。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.OleDb.OleDbException: Microsoft Jet 数据库引擎打不开文件'D:\wwwroot\test\data\'。 它已经被别的用户以独占方式打开,或没有查看数据的权限。

(b) 如果 db1.mdb 是 Access XP 创建的数据库,出现如下错误:

“/test”应用程序中的服务器错误。

----------------------------------------------

操作必须使用一个可更新的查询。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。


(c) 原因初步分析:因为包含有“UPDATE”“INSERT”“UPDATE”等命令,需要对数据库文件本身进行写入操作,所以上述权限不能满足此需求,我们需要进一步放开权限。

我们放开一些权限,

a) D:\wwwroot\test\data\ 文件夹不变:

b) D:\wwwroot\test\data\db1.mdb 文件本身给用户ASPNET以如下权限: 允许拒绝

完全控制□□

修改□□

读取及运行√□

列出文件夹目录√□

读取√□

写入√□

1.3 放开权限后继续实验,

(a) 如果 db1.mdb 是 Access 2000 创建的数据库,出现如下错误:

“/test”应用程序中的服务器错误。

------------------------------------------

不能锁定文件。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.OleDb.OleDbException: 不能锁定文件。

(b) 如果 db1.mdb 是 Access XP 创建的数据库,没有出现错误。

(c) 原因初步分析:我们发现在打开 Access 数据库时,同时会在所在目录生成一个同名的 *.ldb 文件,这是一个 Access 的锁定标记。鉴于此,我们猜测,用户 ASPNET 访问 Access 数据库时,也需要生成一个锁定标记,而该目录没有允许其写入,因此出错。至于 Access XP 创建的数据库为什么没有这个错误,原因还不得而知。

我们进一步放开权限,

a) D:\wwwroot\test\data\ 文件夹给用户ASPNET以如下权限: 允许拒绝

完全控制□□

修改□□

读取及运行√□

列出文件夹目录√□

读取√□

写入√□

b) D:\wwwroot\test\data\db1.mdb 文件本身给用户ASPNET以如下权限:

√ 允许将来自父系的可继承权限传播给该对象

1.4 继续实验,发现错误已解决,那么上面这个权限就是我们需要放开的“最低权限”。

(a) 如果 db1.mdb 是 Access 2000 创建的数据库,我们会发现一个小问题:生成的 *.ldb 文件不会自己删除,访问后该文件依然存在,但这个问题不会影响 ASP.NET 的正常运行。

(b) 如果 db1.mdb 是 Access XP 创建的数据库,没有出现上面类似问题。

(c) 原因初步分析:我们仅仅是给了 ASPNET 以写入文件夹的权限,没有给它修改的权限,所以文件一旦写入,便无法修改其内容,*.ldb 也就删除不掉了。

如果非要解决这个问题,进一步放开权限为:

a) D:\wwwroot\test\data\ 文件夹给用户ASPNET以如下权限: 允许拒绝

完全控制□□

修改√□

读取及运行√□

列出文件夹目录√□


读取√□

写入√□

b) D:\wwwroot\test\data\db1.mdb 文件本身给用户ASPNET以如下权限:

√ 允许将来自父系的可继承权限传播给该对象

1.5 附带着,实验另一种情形:我们把 db1.mdb 在 Access 打开编辑,同时访问 ASP.NET。

(a) 如果 db1.mdb 是 Access 2000 创建的数据库,我们发现并没有出现什么问题。

(b) 如果 db1.mdb 是 Access XP 创建的数据库,出现如下错误:

“/zhao”应用程序中的服务器错误。

------------------------------------------------

不能使用 '';文件已在使用中。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.OleDb.OleDbException: 不能使用 '';文件已在使用中。

(c) 原因初步分析:Access 数据库是单用户单线程的数据库,我们在 Access 里面打开编辑数据库文件时其实是以当前 Windows 用户(比如Administrator)身份打开数据库,而 ASP.NET 默认使用的是 ASPNET 虚拟用户(隶属于 Users 组),级别低于 Administrator,无法和 Administrator “抢夺”权限,所以出现冲突错误。至于 Access 2000 忽略这个问题的情形我们也不必做讨论了,可能是 Access 2000 没有考虑那么多因素吧。

1.6 再附带一种情形:将 db1.mdb 的属性改为“只读”,无论是 Access 2000 还是 Access XP 都将分别出现与 1.2 中各自的错误相同的错误提示。

(二)实验结论

1. 我们首先再次总结一下 Access 数据库文件的 NTFS 权限设置的缘起:

在 ASP.NET 中默认是以一个叫做 ASPNET 的虚拟用户的身份来访问、操作数据库的,你可以在“控制面板”-“管理工具”-“计算机管理”-“本地用户和组”-“用户”中看到这个用户,默认情况下是:

全名:ASP.NET 计算机帐户

描述为:用于运行 ASP.NET 辅助进程(aspnet_wp.exe)的帐户。

隶属于:Users组。

使用这么一个隶属于 Users 组的用户来进行文件操作、数据库操作的风险是要比用一个 Administrators 组的用户的风险要小得多,这也是 ASP.NET 在安全方面的一个考虑吧。

既然是这么一个用户需要访问、操作数据库文件本身,那么我们就需要给它一定的 NTFS 权限以允许它的访问。显然没有 NTFS 的权限许可,ASPNET 就无法访问、操作数据库,就会出现上面实验中所看到的那些错误了。

2. 经过上面的实验,我们已经知道如下的 NTFS 权限设置是可以满足一般需求的:

a) D:\wwwroot\test\data\ 文件夹给用户ASPNET以如下权限: 允许拒绝

完全控制□□

修改□□


读取及运行√□

1 2 下一页
  • 上一篇教程: 获取ACCESS2000数据库中所有表的名称
  • 下一篇教程: Access使用查询 在查询中执行计算的注意事项
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.