Windows Server 2019/IIS10下Access数据库ODBC连接权限异常求助
IIS10 + Access 数据库普通用户连接失败,管理员访问后恢复的彻底解决方法
环境与问题现象
- 服务器:Windows Server 2019 + IIS10
- 数据库:Access .mdb 文件,
global.asa中的连接代码:strconn = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\inetpub\intranet\data.mdb" set conn = Server.CreateObject("ADODB.Connection") conn.open strconn - 身份验证:已启用Windows身份验证
- 核心问题:普通用户访问时弹出验证窗口且验证失败;管理员登录一次后,所有普通用户(无论哪台电脑)都能正常访问,问题出在
conn.open strconn这一行。
已做排查
- 检查过数据库文件、
ACEODBC.DLL的权限 - 尝试过ODBC系统数据源
- 用ProcessMonitor排查,未发现拒绝访问记录
- 卸载重装过Access数据库引擎
- 排查
c:\temp、c:\windows\temp目录权限,确认首次连接会创建JETxxx.tmp文件,空闲超时后消失,和当前现象完全吻合
临时方案
将空闲超时设为0,用管理员账号访问一次内网,但服务器或IIS重启后必须重复操作,急需彻底解决。
彻底解决方法
1. 给IIS应用池身份配置临时目录权限
Access驱动创建临时文件时,用的是应用池的运行身份,不是访问用户的账号。必须确保这个身份对系统临时目录有读写权限:
- 打开IIS管理器,找到内网站点对应的应用池,查看它的“标识”(默认是
ApplicationPoolIdentity) - 打开资源管理器,右键
C:\Windows\Temp(如果有C:\Temp也一起处理)→属性→安全→编辑→添加:- 若使用
ApplicationPoolIdentity,直接输入IIS AppPool\[你的应用池名称],验证名称无误后确定 - 给该身份勾选读取和写入、修改权限,保存设置
- 若使用
2. 连接字符串中指定专属临时目录
直接在连接字符串里显式指定Access驱动的临时文件路径,避开系统默认临时目录的权限问题:
strconn = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\inetpub\intranet\data.mdb;TempDir=C:\inetpub\intranet\tmp"
- 先创建
C:\inetpub\intranet\tmp目录,给应用池身份和所有内网用户开放读写权限 - 该目录建议和网站目录在同一分区,避免跨分区的权限限制
3. 调整Windows身份验证的内核模式设置
如果启用了Windows身份验证,检查内核模式是否开启,避免模拟权限冲突:
- 打开站点的“身份验证”→Windows身份验证→高级设置,确保“启用内核模式身份验证”处于勾选状态
- 若开启了用户模拟,去站点“高级设置”里确认模拟用户(或Authenticated Users组)对临时目录有读写权限
4. 给Access引擎文件添加普通用户权限
找到Access数据库引擎的安装目录(比如Office 2019对应C:\Program Files\Microsoft Office\root\Office16),找到ACEODBC.DLL:
- 右键文件→属性→安全,添加
Authenticated Users组,赋予读取和执行权限,确保普通用户能正常加载驱动
内容的提问来源于stack exchange,提问作者Didier CLAPIER
相关产品推荐
相关产品推荐

