Я настроил связанный сервер для чтения набора файлов CSV, расположенных локально на компьютере с SQL Server, следующим образом:
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' выполнять операторы выбора.
BTW,Я пытаюсь обойти известную ошибку в SSIS, когда он не может обрабатывать CSV с запятыми в полях, разделенных двойными кавычками.Я наткнулся на этот пост , в котором описывается использование связанного сервера для обхода проблемы без необходимости кодирования пользовательской процедуры синтаксического анализа.Прекрасно работает, за исключением всего, что касается безопасности;Я не хочу, чтобы мое приложение подключалось как 'sa'.Я использую SQL 2005 с пакетом обновления 3 (SP3).
Есть ли у вас какие-нибудь идеи, как заставить это работать с обычным входом в систему?
TIA, Джим
@ JustinStolle КогдаЯ установил его, как вы описываете, я получаю другую ошибку для пользователя не-sa (sa все еще работает):
Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "MyLinkmsgstr "возвращенное сообщение" Невозможно запустить приложение. Информационный файл рабочей группы отсутствует или открыт исключительно другим пользователем. "Сообщение 7399, уровень 16, состояние 1, строка 1 Поставщик OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера «MyLink» сообщил об ошибке.Ошибка аутентификации.Сообщение 7303, уровень 16, состояние 1, строка 1 Не удалось инициализировать объект источника данных поставщика OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера «MyLink».
Не удается импортировать файл;SSIS не может справиться с этим.