Массовая вставка через сеть

13

Может ли кто-нибудь помочь мне с этим?

BULK INSERT DATABESE01.dbo.TABLE01
FROM '\\COMPUTER01\FOLDER01\TextFile.txt'
WITH
(
    FIELDTERMINATOR = ' ',
    rowterminator = '\n',
    tablock
)

Ошибка показывает, не удалось открыть:

Не удалось выполнить массовую вставку, поскольку не удалось открыть файл '\ SERVERNAME \ FOLDERNAME \ textFile.txt'. Код ошибки операционной системы 5 (доступ запрещен.)

Путь находится на другом компьютере в сети.

Джонас Айви В. Империал
источник
8
Имеет ли учетная запись , под которой работает SQL Server, разрешение на доступ '\\COMPUTER01\FOLDER01\TextFile.txt'? Обратите внимание, что учетная запись, как правило, будет отличаться от вашей учетной записи.
Damien_The_Unbeliever
3
Вы также можете добавить точную ошибку, которую получаете?
ypercubeᵀᴹ
в дополнение к @Damien_The_Unbeliever: «Чтобы указать файл общих данных, используйте его имя универсального соглашения об именах (UNC), которое принимает общую форму, \\ Servername \ Sharename \ Path \ Filename»
JoseTeixeira
@ypercube - Не удалось выполнить массовую вставку, поскольку файл '\\ SERVERNAME \ FOLDERNAME \ textFile.txt' не может быть открыт. Код ошибки операционной системы 5 (доступ запрещен.). Спасибо, сэр
Джонас Айви В. Империал
У меня та же проблема с использованием того же домена и междоменного домена (код ошибки операционной системы 5 (доступ запрещен.)). Интересно, если я использую XP_CMDSHELL, чтобы проверить, существует ли файл, или я могу даже переместить файл, но массовая вставка выбрасывает отказ в доступе. Учетная запись службы sql и моя учетная запись Windows имеют разрешения на доступ к папке.

Ответы:

14

Я собираюсь сделать прыжок в веру и предположить, что вы подключаетесь к SQL Server с использованием аутентификации Windows. В таком случае у вас есть двойной переход Kerberos: один переход - это ваше клиентское приложение, подключающееся к SQL Server, второй переход - это SQL Server, подключающийся к удаленному \\COMPUTER01. Такой двойной переход подпадает под ограничения Ограниченного делегирования, и вы в конечном итоге получаете доступ к общему ресурсу как анонимный вход и, следовательно, доступ запрещен.

Чтобы устранить эту проблему, необходимо включить ограниченное делегирование для учетной записи службы SQL Server. В этом блоге Практическое руководство. Массовая вставка SQL Server с ограниченным делегированием (в доступе отказано) приведен пример того, как это сделать, и я действительно надеюсь, что шаг о том, как «включить неограниченное делегирование» - это просто опечатка, поскольку неограниченное делегирование является просто зло.

В случае, если я перепрыгнул через оружие, и вы входите в SQL Server с использованием аутентификации SQL, вам нужно будет создать учетные данные для входа в SQL и использовать их для доступа к сетевым ресурсам. См CREATE CREDENTIAL.

Ремус Русану
источник
1

Sql Server попытался открыть файл, файловый сервер сказал ему «Доступ запрещен», поскольку учетная запись, под которой работает SQL Server, не имеет разрешения на открытие файла. Измените настройки безопасности файла соответствующим образом, и он будет работать.

TomTom
источник
1

Я запускал сценарий под именем входа в SQL (с разрешением bulkadmin) и разрешал аутентификацию в сетевой папке с использованием учетной записи службы SQL или учетной записи агента SQL Server.

Cozzaro Nero
источник
-2

Я скажу вам, что работает для меня каждый раз, когда я получаю это сообщение. я открываю файл csv как текст в блокноте и удаляю все пробелы в файле, я не могу видеть эти пустые строки в файле excel. Обычно это просто последняя строка, которая появляется, хотя она пуста

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