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