我们现在正在将所有生产数据库从 SQL Server 2005 32 位实例迁移到全新的 SQL Server 2012 64 位实例。
我们的开发人员仍然遭受的主要困难之一是链接服务器。
我们有很多程序需要从文本、csv 或 excel 文件中获取一些数据,它的实现方式是使用链接服务器到文本文件,这样您就可以轻松地向文本文件抛出 select 语句并将其插入到桌子。
问题提出了 32 位服务器使用Microsoft.Jet.OLEDB.4.0
驱动程序的文件位于对每个人都具有完全权限的剪切目录中,我们从未遇到安全问题。
在新的 64 位服务器上,我们添加了一个链接服务器,其语法如下:
USE [master]
GO
EXEC master.dbo.sp_addlinkedserver
@server = N'TEMP_FILES_1'
, @srvproduct=N''
, @provider=N'Microsoft.ACE.OLEDB.12.0'
, @datasrc=N'\\SERVER-APP01\BWA\TempFiles'
, @provstr=N'Text'
笔记:
- 数据源位于网络共享上。
- MSSQL 服务作为域管理员帐户运行。
- 我以域管理员的身份远程登录,当然也是本地管理员。
- 该
\\SERVER-APP01\BWA\TempFiles
目录为每个人设置了完全访问权限。
现在,当我运行时,EXEC sp_testlinkedserver [TEMP_FILES_1]
我收到以下错误消息:
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "TEMP_FILES_1" returned message "'\\SERVER-APP01\BWA\TempFiles' is not 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.".
这绝对是一个安全问题,但有趣的是,当我运行xp_cmdshell 'dir \\SERVER-APP01\BWA\TempFiles'
它时,它会返回记录,很明显服务可以访问这个文件夹......
在我的本地计算机的另一端,我也有一个具有相同链接服务器的 64 位实例,它就像一个魅力!
我一直在互联网上寻找解决问题的方法,但似乎很少使用链接到文本文件的服务器,尤其是 64 位。