Windows Server 2008 R2 x64 SP1、Sql Server 2008 x64 SP3、Access 数据库引擎 x64 SP1
我有链接服务器:
EXEC master.dbo.sp_addlinkedserver @server = N'dbf2', @srvproduct=N'dbf2', @provider=N'MSDASQL', @provstr=N'DRIVER={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};'
从本地磁盘查询 dbf 文件时一切正常:
select * from openquery(dbf2, 'select * from c:\\V4C8MA6.dbf') a
但是从网络共享查询时
select * from openquery(dbf2, 'select * from \\\\gefest\\upload\\V4C8MA6.dbf') a
我有错误:
Msg 7399, Level 16, State 1, Line 6
The OLE DB provider "MSDASQL" for linked server "dbf2" reported an error. The provider did not give any information about the error.
Msg 7350, Level 16, State 2, Line 6
Cannot get the column information from OLE DB provider "MSDASQL" for linked server "dbf2".
我尝试了不同的变体来描述路径:[],“”,``,\“\”,...。网络共享访问一切正常,sql server 帐户具有所需的访问权限。但...
如何让它发挥作用?
2012 年 5 月 4 日添加:
xp_cmdchell 完美地列出了目录。
这就是我发现的:我创建了链接服务器,其中 sprovstr 指示文件的位置:
@provstr=N'DRIVER={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};dbq=\\gefest\upload'
如果我使用sql server auth连接到 sql server,这将有效。
这是 ProcMon 在使用dbq时显示的内容:
日期和时间:2012 年 5 月 4 日上午 9:57:55
事件类别:文件系统
操作:CreateFile
结果:成功
路径:\\gefest\upload\
TID:8588
持续时间:0.0001988
所需访问:读取属性
处置:打开
选项: Open Reparse Point
Attributes: n/a
ShareMode: Read, Write, Delete
AllocationSize: n/a
OpenResult: Opened
这是在查询中指示路径时:
日期和时间:2012 年 5 月 4 日上午 9:58:53
事件类别:文件系统
操作:CreateFile
结果:对象路径无效
路径:\\gefest\upload\
TID:8588
持续时间:0.0000819
所需访问:读取属性
处置:打开
选项:打开重分析点
属性:n/a
ShareMode:读取、写入、删除
AllocationSize:n/a
为什么 sql server 在第一次查询时接收到对共享的所需访问权限,而在第二次查询时没有?
第三种和第四种变体是使用windows auth连接到服务器时:
使用dbq:
日期和时间:2012 年 5 月 4 日上午 10:02:54
事件类别:文件系统
操作:CreateFile
结果:访问
被拒绝路径:\\gefest\upload\
TID:8588
持续时间:0.0031837
所需访问:读取属性
处置:打开
选项: Open For Backup, Open Reparse Point
属性: n/a
ShareMode: Read, Write, Delete
AllocationSize: n/a
Impersonating: GAZ\kozlovai
在查询中指示路径:
日期和时间:2012 年 5 月 4 日上午 10:02:20
事件类别:文件系统
操作:CreateFile
结果:对象路径无效
路径:\\gefest\upload\
TID:8588
持续时间:0.0000378
所需访问:读取属性
处置:打开
选项:打开备份,打开重分析点
属性:不适用共享
模式:读取、写入、删除
分配大小:不适用
模拟:GAZ\kozlovai
连接到共享时 Sql server 模拟。并且这个帐户 'GAZ\kozlovai' 对共享具有完全访问权限,但 sql server 仍然无法打开文件...