2011-04-04 18 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解決方案爲我工作。

相關問題