Невозможно получить доступ к CSV-файлу с помощью связанного сервера, используя любой логин, кроме "sa"

Я настроил связанный сервер для чтения набора файлов 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 не справляется с этим.


person DelphinusC    schedule 04.04.2011    source источник


Ответы (1)


Просто после небольшого тестирования кажется, что только пользователи с ролью sysadmin могут запрашивать этот тип связанного сервера, поскольку ему нужны разрешения для работы с файловой системой. Вероятно, в другом месте есть более подробное объяснение того, какие точные разрешения требуются.

Кажется, это работает, когда в настройках безопасности связанного сервера я привязываю пользователя без специальных разрешений к локальному sa пользователю или другому sysadmin пользователю (несмотря на то, что он помечен как «Удаленный пользователь»).

Свойства связанного сервера

В качестве долгосрочного решения, почему бы не создать задание, которое импортирует файл CSV в локальную таблицу? Это упростило бы поддержку разрешений, и у вас была бы определенная структура таблицы для написания запросов.

person JustinStolle    schedule 04.04.2011