Невозможно получить доступ к CSV-файлу через связанный сервер, используя любой логин, кроме 'sa' - PullRequest
0 голосов
/ 04 апреля 2011

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

Ответы [ 3 ]

2 голосов
/ 08 апреля 2011

Найден ответ, похороненный в комментариях к этому вопросу: SQL Server Linked Server к Microsoft Access

Оказывается, мой простой CSV-файл имеет идентификатор / пароль ... это идентификатор доступа по умолчанию ' admin ' с пустым паролем.

0 голосов
/ 03 октября 2012

Я знаю, что это очень старая тема, но я обнаружил, что решение в этой ССЫЛКЕ работает для меня.

0 голосов
/ 04 апреля 2011

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

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

Linked Server Properties

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...