80004005error 有两种情况,1---DSN字符串没有找到,如防问另
一台服务器的数据时,无访问条件或本身DSN字符串有错
2----找到数据库时,没有权限写,大多是ACCESS的.mdb,是ASP时,
对.mdb文件目录设置IUSR-MACHINE可写,是.net时设置aspnet可写
不算难题的问题Microsoft OLE DB Provider for ODBC Drivers 错误 ‘80004005′
因为windows2003的web server是iis6,如果服务器由windows 2000升级到windows 2003的话,可能在一些安全权限上会遇到一些麻烦。上次我在学校学科规划与建设处就是遇到了类似问题。后来是在看了这篇短文后受到一些启发和指示。当时就是涉及到数据库文件的修改权限。
其实包括fat32和ntfs之间转换后都会存在这样类似的问题。
当然,这些问题对于高手是不算什么的。可是,我是菜鸟我怕谁呢?
Microsoft OLE DB Provider for ODBC Drivers 错误 ‘80004005′
系统环境:
操作系统: Windows Server 2003 Enterprise
Web Server: IIS6
磁盘格式: NTFS
数据库: Access
错误信息:
Microsoft OLE DB Provider for ODBC Drivers 错误 ‘80004005′
[Microsoft][ODBC Microsoft Access Driver] 操作必须使用一个可更新的查询。
或
Microsoft OLE DB Provider for ODBC Drivers 错误 ‘80004005′
[Microsoft][ODBC Microsoft Access Driver] 不能更新。数据库或对象为只读。
解决方法:
打开对应的数据库(*.mdb)文件的属性,安全选项卡,添加或修改“Internet 来宾帐户(IUSR_MACHINENAME)”的权限,允许“写入”。
odbc要在本地系统上设置好才可以用的。要传到网上可以用ado组件建立连接
<%
db_path = "database/cnbruce.mdb"
Set conn= Server.CreateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db_path)
conn.Open connstr
%>
1.错误信息(错误信息我不用翻译成中文了把,呵呵,大家谅解)
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet database
engine cannot open the file '(unknown)'. It is already opened exclusively
by another user, or you need permission to view its data.
原因:
这个错误发生在当IIS使用匿名帐号(通常是IUSR)时,该帐号在NT中对数据库所在的目录
没有正确的权限.(这就是为什么在Win95和PWS下没问题,因为win95根本就没有目录权限这一说)
检查文件和目录的权限. 确定你能够在该目录中有能够新建和删除临时文件的权限。
这些临时文件其实是数据库建立在同一个目录下的文件, 但是要注意的是,有可能这些文件
也可能建立在别的目录,例如 /Winnt.
使用NT的文件监视程序监视文件失败时到底是访问了什么目录。
这个NT的文件监视程序可以在这个地方下载http://www.sysinternals.com.
如果你对数据库使用了一个网络地址,例如映射地址,就要检查一下共享文件和目录的权限,
还要检查一下数据源文件(DSN)是否被别的程序标志成为正在使用中,
这些别的程序一般是Visual InterDev,关闭任何一个InterDev中的正打开和数据库连接的项目。
这个错误还可能发生在这种情况:如果在DSN中使用了一个UNC路径(就是通用命名协议),请改用
本地路径进行测试,因为如果对本地数据库使用UNC也可能出错。
还可能发生在这种情况,如果服务器要访问Access中的一个表,而这个表却联接在一个网络服务器上。
2.错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] Couldn't use '(unknown)'; file
already in use.
原因:
多人使用时数据库被锁定。
3.错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Driver Manager] Data source name not found and no default
driver specified.
原因:
最可能的原因是ConnectString是一个在global.asa中初始化的Session变量,但是global.asa
却没有正常工作。解决办法是,检查赋值时是否正确:(在你的asp中加入下面的代码)
<%= "'auth_user' is " & request.servervariables("auth_user")%>
<P>
<%= "'auth_type' is " & request.servervariables("auth_type")%>
<P>
<%= "connection string is " & session("your_connectionstring")%>
<P>
还有一个原因就是你在你的ConnectString中加入了多余的空格,例如
DSN = MyDSN; Database = Pubs;
试试改成下面这个样子:
DSN=MyDSN;Database=Pubs;
如果是global.asa还没有工作,检查该文件是否在运用程序的根目录中,或者是虚拟目录的根目录中。
还有可能错误出现的原因是DSN名称没找着,这可以采用我提供的id=36767的办法解决。
最后是检查是否安装了最新的驱动程序,既是否是最新的MDAC版本。
4.错误信息
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Driver Manager] Data source name not ??
原因:
这个错误有可能是出现在你的计算机上软件安装(或则反安装)的顺序上。
如果ODBC的版本不一致的话,就会发生该错误。
解决办法是安装最新版本的MDAC
5.错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Access 97 ODBC driver Driver]General error Unable to open
registry key 'DriverId'.
原因:
这个错误发生在爱从注册表中读取数值的时候。 使用regedit32.exe检查你的注册表的权限。
你也可以使用NT中的注册表监视程序(NTRegMon)来看读取失败信息。该程序到这找:http://www.sysinternals.com
6.错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC SQL Server Driver][dbnmpntw]ConnectionOpen (CreateFile()).
原因:
两个原因:当一个数据库中包含有分别在不用机器上的许可关系时,
这也可能发生在同一台机器上,当你给一个关系设置了UNC路径,而另一个关系却是本地路径。
错误原因是:
当用户使用IIS匿名帐号登录后,对本地这台机器而言他是有权的,但是对于一个UNC路径的机器,
另外这台机器是不会认为你当前匿名登录的帐号在它那上面也是合法的。
这样它就不允许你访问它上面的资源,导致错误。
两个解决办法:
1。在IIS工具中,改变IIS匿名帐号成另外一个基于域的帐号。(也就是不使用匿名登录)
2。或则在那台你要访问资源的机器上也创建一个和当前匿名帐号同样的帐号,使用同样的密码。
7.错误信息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' Microsoft][ODBC
Microsoft SQL Driver] Logon Failed()
原因:
该错误是由SQL Server产生的,当它不接受或则不能够认识这个登录帐号的时候,或者没有使用管理员身份登录,
也可能是在NT中没有SQL影射帐号造成的。
使用系统管理员帐号(SA)登录,一般密码应该为空.注意,这时必须使用CoonectString而不能够使用DSN文件。
因为DSN中没有保存用户名和密码。
检查NT是否给SQL映射了帐号。
8.错误信息
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC SQL Server Driver][SQL Server] Login failed- User: Reason:
Not defined as a valid user of a trusted SQL Server connection.
原因:
原因同上。
试试这个办法:在SQL Server的Enterprise Manager中,选择Server/SQL Server/Configure[ASCII
133]/Security Options/Standard.
如果是运行在IIS4中,取消选择该项目的Password Synchronization选项。
9.错误信息
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] Couldn't lock file.
原因:
也许是没有正确的权限生成Access数据库的锁定文件(.ldb)
默认时,该文件和你的数据库是同一个目录的。
给匿名帐号全权访问数据库共享目录的权限。
有时是因为文件是因为共享时有意使用了只读的权限限制。试试使用下面的代码。
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = adModeShareDenyWrite '8
10.错误信息
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] '(unknown)' isn't a valid
path. Make sure that the path name is spelled correctly and that you are
connected to the server on which the file resides.
原因:
路径非法。最可能发生在当Global.asa和CoonecntString被使用到另外一台机器上的时候。
11.错误信息
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC SQL Server Driver][SQL Server] The query and the views in
it exceed the limit of 16 tables.
原因:
查询太复杂了,对查询有限制。
12.错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC SQL Server Driver][DBMSSOCN] General network error. Check
your network document
原因:
当装有SQL Server的机器改名的时候。但是DSN还使用了原来的机器名。
1.
ASP 程序运行时提示:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005' [Microsoft][ODBC Microsoft Access Driver] 常见错误 不能打开注册表关键字 'Temporary (volatile) Jet DSN for process 0x1844 Thread 0x1b40 DBC 0x554cc 59c Jet'
2.
错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access 97 Driver] Couldn't use '(unknown)'; file already in use.
3.
错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access 97 Driver] Couldn't lock file.
4.
错误提示:
Microsoft JET Database Engine 错误 '80040e09' 不能更新。数据库或对象为只读。
5.
误提示: 未启用父路径
症状举例:
Server.MapPath() 错误 'ASP 0175 : 80004005'
不允许的 Path 字符
/0709/dqyllhsub/news/OpenDatabase.asp ,行 4
在 MapPath 的 Path 参数中不允许字符 '..' 。
6.
HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝。
7.
HTTP 错误 401.3 - 未经授权:访问由于 ACL 对所请求资源的设置被拒绝。
8.
错误提示: Active Server Pages 错误 'ASP 0126'
找不到包含文件 /index.asp ,行 11
找不到包含文件 'admin/upfile_class.asp' 。
9.
HTTP 错误 401.2 - 未经授权:访问由于服务器配置被拒绝。
10.
HTTP 错误 403.6 - 禁止访问:客户端的 IP 地址被拒绝。
11.
HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝。
12.
TTP 错误 401.3 - 未经授权:访问由于ACL对所请求资源的设置被拒绝。
Q:ASP 程序运行时提示:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005' [Microsoft][ODBC Microsoft Access Driver]常见错误不能打开注册表关键字'Temporary (volatile) Jet DSN for process 0x1844 Thread 0x1b40 DBC 0x554cc 59c Jet'
A:这是因为你用的 access97 数据库,我们是用的 win2k+access2000 驱动,这个对 access97 的兼容性不太好,有时会出现不稳定的情况。
解决的方法也很简单,你用 access2000 把你的数据库打开,另存为一个文件,然后把这个文件上传到服务器上覆盖原来的数据库就可以了。
Q:错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access 97 Driver] Couldn't use '(unknown)'; file already in use.
A: 多人使用时数据库被锁定。
Q:错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access 97 Driver] Couldn't lock file.
A: 也许是没有正确的权限生成 Access 数据库的锁定文件 (.ldb) 默认时,该文件和你的数据库是同一个目录的。给匿名帐号全权访问数据库共享目录的权限。 有时是因为文件是因为共享时有意使用了只读的权限限制。试试使用下面的代码。 Set Conn = Server.CreateObject("ADODB.Connection")
Q: 错误提示:
Microsoft JET Database Engine 错误 '80040e09'
不能更新。数据库或对象为只读。
A: 未打开数据库目录的读写权限。 解决方法:
( 1 )检查是否在 IIS 中对整个网站打开了 “ 写入 ” 权限,而不仅仅是数据库文件。
( 2 )检查是否在 WIN2000 的资源管理器中,将网站所在目录对 EveryOne 用户打开所有权限。具体方法是:打开 “ 我的电脑 ”---- 找到网站所在文件夹 ---- 在其上点右键 ---- 选 “ 属性 ”----- 切换到 “ 安全性 ” 选项卡,在这里给 EveryOne 用户所有权限。
注意: 如果你的系统是 XP ,请先点 “ 工具 ”----“ 文件夹选项 ”----“ 查看 ”----- 去掉 “ 使用简单文件共享 ” 前的勾,确定后,文件夹 “ 属性 ” 对话框中才会有 “ 安全性 ” 这一个选项卡。
Q:错误提示: 未启用父路径
症状举例:
Server.MapPath() 错误 'ASP 0175 : 80004005'
不允许的 Path 字符
/0709/dqyllhsub/news/OpenDatabase.asp ,行 4
在 MapPath 的 Path 参数中不允许字符 '..' 。
A:许多 Web 页面里要用到诸如 ../ 格式的语句(即回到上一层的页面,也就是父路径),而 IIS6.0 出于安全考虑,这一选项默认是关闭的。
解决方法:
在 IIS 中属性 -> 主目录 -> 配置 -> 选项中。把 ” 启用父路径 “ 前面打上勾。确认刷新。
Q: HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝。
A: 由于用户匿名访问使用的账号是 IUSR_ 机器名,因此如果此账号被禁用,将造成用户无法访问。
解决办法:
控制面板 -> 管理工具 -> 计算机管理 -> 本地用户和组,将 IUSR_ 机器名账号启用。
Q: HTTP 错误 401.3 - 未经授权:访问由于 ACL 对所请求资源的设置被拒绝。
A: Web 客户端的用户隶属于 user 组,因此,如果该文件的 NTFS 权限不足(例如没有读权限),则会导致页面无法访问。
解决办法:
进入该文件夹的安全选项卡,配置 user 的权限,至少要给读权限。关于 NTFS 权限设置这里不再馈述。
Q:错误提示: Active Server Pages 错误 'ASP 0126'
找不到包含文件 /index.asp ,行 11
找不到包含文件 'admin/upfile_class.asp' 。
A: 如果出现类似上面的错误提示,是因为被访问的文件中含有危机系统安全的代码而被杀毒软件删除或者隔离。
解决办法:修改的程序代码,重新上传到服务器上;
相关资料:最近发现不少上传组件被认为是病毒而杀掉,具体表现为客户论坛名为 upload.inc , upload_fun.asp 的文件被认为是病毒文件而杀掉,具体原因是因为国内很多论坛程序使用了名为“无惧上传类”的一段通过 ado.stream 组件上传的代码。这段代码被不少安全机构认为是对于 Web 服务器有恶意威胁,自从五月起将其归类为 backdoor.sinups 恶意程序而查杀。具体安全公告请参阅 http://www.sarc.com/avcenter/venc/data/backdoor.sinups.html
Q:HTTP 错误 401.2 - 未经授权:访问由于服务器配置被拒绝。
A:原因分析: IIS 支持以下几种 Web 身份验证方法:
1、匿名身份验证
IIS 创建 IUSR_ 计算机名称帐户(其中计算机名称是正在运行 IIS 的服务器的名称),用来在匿名用户请求 Web 内容时对他们进行身份验证。此帐户授予用户本地登录权限。你可以将匿名用户访问重置为使用任何有效的 Windows 帐户。
2、基本身份验证
使用基本身份验证可限制对 NTFS 格式 Web 服务器上的文件的访问。使用基本身份验证,用户必须输入凭据,而且访问是基于用户 ID 的。用户 ID 和密码都以明文形式在网络间进行发送。
3、Windows 集成身份验证
Windows 集成身份验证比基本身份验证安全,而且在用户具有 Windows 域帐户的内部网环境中能很好地发挥作用。在集成的 Windows 身份验证中,浏览器尝试使用当前用户在域登录过程中使用的凭据,如果尝试失败,就会提示该用户输入用户名和密码。如果你使用集成的 Windows 身份验证,则用户的密码将不传送到服务器。如果该用户作为域用户登录到本地计算机,则他在访问此域中的网络计算机时不必再次进行身份验证。
4、摘要身份验证
摘要身份验证克服了基本身份验证的许多缺点。在使用摘要身份验证时,密码不是以明文形式发送的。另外,你可以通过代理服务器使用摘要身份验证。摘要身份验证使用一种挑战 / 响应机制(集成 Windows 身份验证使用的机制),其中的密码是以加密形式发送的。
5、.NET Passport 身份验证
Microsoft .NET Passport 是一项用户身份验证服务,它允许单一签入安全性,可使用户在访问启用了 .NET Passport 的 Web 站点和服务时更加安全。启用了 .NET Passport 的站点会依靠 .NET Passport 中央服务器来对用户进行身份验证。但是,该中心服务器不会授权或拒绝特定用户访问各个启用了 .NET Passport 的站点。
解决方法:
根据需要配置不同的身份认证(一般为匿名身份认证,这是大多数站点使用的认证方法)。认证选项在 IIS 的属性 -> 安全性 -> 身份验证和访问控制下配置。
Q: HTTP 错误 403.6 - 禁止访问:客户端的 IP 地址被拒绝。
A: 原因分析:
IIS 提供了 IP 限制的机制,你可以通过配置来限制某些 IP 不能访问站点,或者限制仅仅只有某些 IP 可以访问站点,而如果客户端在被你阻止的 IP 范围内,或者不在你允许的范围内,则会出现错误提示。
解决方法:
进入 IIS 的属性 -> 安全性 ->IP 地址和域名限制。如果要限制某些 IP 地址的访问,需要选择授权访问,点添加选择不允许的 IP 地址。反之则可以只允许某些 IP 地址的访问。
Q: HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝 。
A:原因分析:
由于用户匿名访问使用的账号是 IUSR_ 机器名,因此如果此账号被禁用,将造成用户无法访问。
解决办法:
控制面板 -> 管理工具 -> 计算机管理 -> 本地用户和组,将 IUSR_ 机器名账号启用。
Q:HTTP 错误 401.3 - 未经授权:访问由于 ACL 对所请求资源的设置被拒绝。
A:原因分析:
Web 客户端的用户隶属于 user 组,因此,如果该文件的 NTFS 权限不足(例如没有读权限),则会导致页面无法访问。
解决办法:
进入该文件夹的安全选项卡,配置 user 的权限,至少要给读权限。关于 NTFS 权限设置这里不再馈述。
产品与服务
·新疆IDC数据中心
拥有中国电信全疆80G骨干网,连接各地州及内地与中亚、欧洲各国的通信枢纽。卓越的网络服务品质、专业的技术服务实力、职业的客户服务团队保障客户……
我们承诺:
- · 服务器租用带宽100%保障
- · 服务器托管免费维护
- · 永久免费重装系统
- · 杀毒软件免费送
- · 免费24H无限次重启服务器
- · 7*24小时全年无休用心服务
- · 免费为用户提供ICP备案服务
联系我们
- · 公司地址:新疆乌鲁木齐市沙依巴克区炉院街90号
- · 联系电话:0991-5803090 18009918510
- · 图文传真:0991-5803091
- · 电子邮箱:service@sintotel.com