Не удалось выполнить массовую вставку при выполнении с удаленного клиента, но успешно на локальном - PullRequest
0 голосов
/ 20 июня 2020

Пожалуйста, найдите диаграмму для моей проблемы, как показано ниже:

enter image description here

У меня 3 сервера в одном домене, есть SQL Сервер экземпляр A (это служба windows, запущенная в домене \ User1). В этом случае у нас есть хранимая процедура, используемая для BULK INSERT текстового файла из общей сетевой папки на сервере C, домен \ User1 имеет полные разрешения на эта папка.

Моя проблема: хранимая процедура работает нормально (зеленая стрелка) при подключении через SSMS на своем (сервере A). Но это не удалось, когда я перешел на SSMS на сервере B (войдите в тот же домен \ User1 в тот же экземпляр A). Ошибка "Доступ запрещен" к текстовому файлу (красная стрелка). Участвует ли в этом клиент? Я думаю, что клиент не имеет значения, чтение файла выполняется с сервера (пользователем, который запускает службу экземпляра A)

Примечание. Если я подключаю экземпляр A из SSMS B с помощью SQL Logon User (не windows account) хранимая процедура работает нормально.

Может ли кто-нибудь дать мне совет и извините за мой плохой Engli sh

1 Ответ

1 голос
/ 22 июня 2020

Это просто ответ по ссылке, но, надеюсь, он поможет.

Кстати, я благодарю вас за то, что вы нашли время проанализировать проблему вплоть до рисования диаграммы. Это гораздо более высокое качество, чем большинство вопросов здесь.

Я считаю, что вы столкнулись с проблемой двойного перехода. Я везде искал модель разрешений BULK INSERT и, наконец, нашел эту https://dba.stackexchange.com/questions/189676/why-is-bulk-insert-considered-dangerous

, в которой говорится об использовании BULK INSERT:

При доступе к SQL Сервер через логин Windows, эта учетная запись Windows будет олицетворена (даже если вы переключите контекст безопасности с помощью EXECUTE AS LOGIN = '...') для доступа к файловой системе

и это

при доступе к SQL серверу через SQL Server Login, тогда внешний доступ выполняется в контексте учетной записи службы SQL Server

Когда у вас есть проблемы с аутентификацией windows и есть три сервера и олицетворение, это часто проблема двойного перехода.

Это может вам в этом помочь:

https://dba.stackexchange.com/questions/44524/bulk-insert-through-network

Что, в свою очередь, ссылается на это:

https://thesqldude.com/2011/12/30/how-to-sql-server-bulk-insert-with-constrained-delegation-access-is-denied/

...