2011-04-04 19 views
0

我已经建立了一个链接的服务器来读取一组位于本地的SQL Server计算机上的CSV文件以外的任何登录访问CSV文件,内容如下:无法使用链接服务器使用的不是“山”

USE master 
go 

IF EXISTS (SELECT * FROM sys.servers WHERE name = 'MyLink') 
    EXEC sp_dropserver 'MyLink', 'droplogins'; 

EXEC sp_AddLinkedServer @server  = 'MyLink', 
         @srvproduct = '', 
         @provider = 'Microsoft.ACE.OLEDB.12.0', 
         @datasrc = 'C:\Data\Feeds', 
         @provstr = 'Text' 

EXEC sp_AddLinkedSrvLogin MyLink, FALSE 
go 
然后

下面的代码工作完美,只要我登录的“山”(要么语法工程):

SELECT * FROM MyLink...myFile#csv 
SELECT * FROM OPENQUERY(MyLink,'select * from myFile.csv') 

如果我登录的任何其他用户,但是,我得到以下错误:

Msg 7416, Level 16, State 2, Line 1 
Access to the remote server is denied because no login-mapping exists. 

尝试通过脚本或通过修改SSMS中的链接服务器属性来添加映射来更改远程登录,不仅不起作用,而且还打破了'sa'运行选择语句的能力。

顺便说一句,我正在尝试解决SSIS中的known bug,它无法在双引号分隔的字段中使用逗号来处理CSV。我偶然发现了this post,它描述了使用链接服务器来解决问题而无需编写自定义分析例程。工作很好,除了整个安全的事情;我不希望我的应用程序连接为'sa'。我正在使用SQL 2005 SP3。

任何想法使这个工作与一个普通的登录?

TIA, 吉姆

@JustinStolle当我将它作为你的描述,我得到了非sa用户不同的错误(SA似乎仍然工作):

OLE DB提供程序“ Microsoft.ACE.OLEDB.12.0“链接服务器”MyLink“返回消息”无法启动您的应用程序,工作组信息文件丢失或仅由其他用户打开“。 Msg 7399,Level 16,State 1,Line 1 链接服务器“MyLink”的OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”报告了错误。验证失败。 消息7303,级别16,状态1,行1 无法初始化链接服务器“MyLink”的OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象。

我无法导入文件; SSIS无法处理它。

回答

2

发现埋在评论这个问题的答案:SQL Server Linked Server to Microsoft Access

原来我简单的小CSV文件中确实有一个ID /密码...它是默认的访问ID'admin',其密码为空。

+0

映射:远程用户:admin;远程密码:无/空白;它也适用于Windows Server 2008 R2 64位+ MS SQL Server 2008 R2 64位;与“Microsoft Office 12.0 Access数据库引擎OLE DB提供程序”/“Microsoft.ACE.OLEDB.12.0”提供Excel xls,dbf(dBASE)文件时访问网络共享/网络目录上的xls,dbf。 “SQL服务器窗口服务”的“windows用户帐户”用于使用“网络共享”权限/用户权限。 – vlakov 2014-09-23 02:12:06

0

只是做了一点测试,似乎只有sysadmin角色的用户可以查询这种类型的链接服务器,因为它需要使用文件系统的权限。在其他地方可能有更详尽的说明,其中需要确切的许可。

当在链接服务器的安全设置中,我将没有特殊权限的用户映射到本地sa用户或其他sysadmin用户(尽管它被标记为“远程用户”),似乎工作正常。

Linked Server Properties

对于一个长期的解决方案,为什么不创建一个CSV文件导入到本地表中的工作吗?这将使维护权限变得更简单,并且您将拥有一个定义的表结构来编写查询。

0

我知道这是一个非常老的线程,但我发现在这个LINK解决方案为我工作。

相关问题