探索Access数据库最佳NTFS权限设置
我们知道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以如下权限:
允许 拒绝 完全控制 □ □ |