Ошибка вставки BULK с путем UNC и проверкой подлинности Windows

У меня есть два сервера: один — сервер приложений с веб-сервисом, а другой — сервер БД с БД SQL Server 2005. Webservice — это приложение vb.net, и все входные файлы будут находиться на сервере приложений. Когда мое приложение вызывает (через веб-службу) сервер БД для выполнения оператора вставки BULK с путем UNC (сервера приложений) с использованием аутентификации Windows (встроенная безопасность), оно завершается с ошибкой -

System.Data.SqlClient.SqlException: не удается выполнить массовую загрузку, так как не удалось открыть файл "\Servername\Foldername\file1.txt". Код ошибки операционной системы 5 (ошибка не найдена). at System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое значение breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, логическое значение разорвать соединение)

Я являюсь администратором на обоих серверах, и веб-сервис работает с моими учетными данными пользователя, а также я являюсь администратором в SQL DB. SQL-сервер работает под учетной записью локальной системы. Я изменил его для запуска в своей учетной записи пользователя, но не повезло! Однако тот же оператор работает, когда я использую проверку подлинности SQL в строке подключения.

Может ли кто-нибудь пролить свет на этот вопрос.

заранее спасибо

Сай


person Community    schedule 12.05.2009    source источник


Ответы (2)


Ваш клиент проходит аутентификацию с помощью SQL Server, затем SQL Server олицетворяет клиента и пытается получить доступ к пути UNC. Это делегирование и неявно запрещено. Вы должны предпринять явные шаги, чтобы включить ограниченное делегирование для учетной записи службы SQL Server. Подробнее см. в этой статье: http://msdn.microsoft.com/en-us/library/ms998355.aspx В статье показано ограниченное делегирование для службы ASP, обращающейся к серверной базе данных, но в вашем случае это будет сервер SQL в середине, обращающийся к внутреннему общему ресурсу UNC.

person Remus Rusanu    schedule 13.05.2009
comment
Спасибо за ответ. Да, я думаю, что включение ограниченного делегирования решит проблему. Но это далеко не так, на данный момент я внес изменения в свое приложение, чтобы скопировать файл на сервер БД и запустить массовую вставку без каких-либо проблем. - person ; 13.05.2009
comment
+1 Супер, вот дополнительная информация: если пользователь использует логин SQL Server, используется профиль безопасности учетной записи процесса SQL Server. Напротив, если пользователь SQL Server входит в систему с использованием проверки подлинности Windows, пользователь может читать только те файлы, к которым может получить доступ его учетная запись, независимо от профиля безопасности процесса SQL Server. msdn.microsoft.com/en-us/library/ms175915.aspx - person Andomar; 13.05.2009

Некоторые идеи по устранению неполадок в случайном порядке:

Работает ли массовая вставка при запуске из Sql Server Management Studio?

Смена учетной записи, под которой работает служба MSSQLSERVER, должна помочь, но перезапускали ли вы Sql Server после изменения учетных данных?

Создайте командную оболочку, которая запускается под тем же пользователем, что и Sql Server:

runas /noprofile /user:domain\username cmd

А затем посмотрите, разрешено ли вам читать сетевой ресурс:

net use \\machine\share
person Andomar    schedule 12.05.2009
comment
Спасибо за ответ .. Когда я запустил массовую вставку в студии SQL mgmt (вошел в систему с использованием проверки подлинности Windows), все сработало нормально! После того, как я изменил учетную запись, под которой работает служба MSSQLSERVER, на пользователя домена (я являюсь администратором), я перезапустил службу. Но все же это не сработало .. Что меня удивляет, так это то, что аутентификация SQL работает, а аутентификация окна - нет ..! Я попробую эту команду и посмотрю, работает ли она !! - person ; 12.05.2009
comment
Да ... я могу получить доступ к общей папке с сервера БД с помощью командной оболочки ... Я думаю, что это может быть ошибка, поскольку оператор массовой вставки не работает с использованием аутентификации Windows с учетом пути UNC. - person ; 12.05.2009
comment
Можете ли вы показать код VB, который выполняет массовую вставку? При повторном прочтении в вашем сообщении об ошибке, похоже, отсутствует обратная косая черта в начале, \Servername\Foldername\file1.txt должен начинаться с \\Servername. - person Andomar; 13.05.2009
comment
Да.. с моим оператором массовой вставки все в порядке.. по ошибке я написал в сообщении, что один\отсутствует. - person ; 13.05.2009