无法使用“sa”以外的任何登录使用链接服务器访问CSV文件

时间:2011-04-04 16:47:11

标签: sql-server sql-server-2005 csv linked-server

我已经设置了一个链接服务器来读取位于SQL Server计算机本地的一组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

如果我以'sa'身份登录(语法有效),以下代码将完美运行:

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”运行select语句的能力。 / p>

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

有关使用普通登录方式实现此目的的任何想法吗?

TIA, 吉姆

@JustinStolle当我按照你的描述进行设置时,我为非sa用户得到了一个不同的错误(sa似乎仍然有效):

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

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

3 个答案:

答案 0 :(得分:2)

在这个问题的评论中找到了答案:SQL Server Linked Server to Microsoft Access

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

答案 1 :(得分:0)

仅仅进行一些测试,似乎只有sysadmin角色的用户才能查询这种类型的链接服务器,因为它需要使用文件系统的权限。在其他地方可能有一个更彻底的解释,需要确切的权限。

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

Linked Server Properties

对于长期解决方案,为什么不创建将CSV文件导入本地表的作业?它可以使维护权限更简单,并且您可以使用已定义的表结构来编写查询。

答案 2 :(得分:0)

我知道这是一个非常古老的帖子,但我发现这个LINK中的解决方案适合我。