IIS部署dotnetcore项目无法编辑共享Access数据库 本地运行正常
问题解决:IIS部署.NET Core项目访问局域网共享Access数据库报错
报错信息:
System.Data.OleDb.OleDbException (0x80004005),错误描述为已由其他用户以独占方式打开,或无访问权限
报错根因
- Visual Studio本地调试时,项目会以当前登录Windows用户的身份运行,该账号默认已经拥有局域网共享路径
\\computername\accdb的读写权限,同时也有权限创建、修改Access数据库配套的.ldb/.laccdb临时锁文件 - 项目发布到IIS后,站点会以对应应用程序池的内置身份(默认是
IIS AppPool\你的应用程序池名称这类本地虚拟账户)运行,这类账户没有局域网共享资源的访问权限,也无法操作共享路径下的锁文件,因此触发权限报错
分步解决方案
1. 修改IIS应用程序池运行身份
- 打开IIS管理器,找到部署站点对应的应用程序池,右键选择「高级设置」
- 找到「进程模型」分组下的「标识」选项,点击右侧的省略号按钮
- 选择「自定义账户」,点击「设置」,输入有权限访问该局域网共享路径的Windows账号用户名和密码(可以是数据库所在计算机的本地账号,也可以是同域下的域账号,需提前确认该账号对
\\computername\accdb路径有读写权限) - 保存设置后重启对应应用程序池
2. 配置共享文件夹的访问权限
- 打开数据库所在计算机的共享文件夹属性,切换到「共享」选项卡,点击「高级共享」-「权限」,给上述自定义账号添加「完全控制」权限
- 切换到「安全」选项卡,同样给该账号添加「读取、写入、修改」的权限
- 单独确认Access
.accdb数据库文件本身的权限,也给该账号开放读写权限,避免权限继承失效
3. 排除文件独占锁定问题
- 确认没有其他用户正在以独占方式打开该
.accdb数据库 - 如果之前异常运行残留了
.laccdb临时锁文件,先删除残留文件后再测试
4. 验证连接字符串配置
- 确认发布后的
appsettings.json中数据库连接字符串配置正确,示例配置参考:
"ConnectionStrings": { "AccessDb": "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\\\computername\\accdb\\你的数据库名称.accdb;Persist Security Info=False;" }
注意配置文件中路径的反斜杠需要转义,需写为\\\\
内容的提问来源于stack exchange,提问作者NiSu
相关产品推荐
相关产品推荐

