Подтвердить что ты не робот

Не может навалом. Код ошибки операционной системы 5 (Доступ запрещен.)

По какой-то странной причине у меня возникают проблемы с выполнением массовой вставки.

BULK INSERT customer_stg
FROM 'C:\Users\Michael\workspace\pydb\data\andrew.out.txt'
WITH
(
    FIRSTROW=0,
    FIELDTERMINATOR='\t',
    ROWTERMINATOR='\n'
)

После прочтения этого я уверен, что правильно настроил свою роль пользователя, как говорится...

Члены предопределенной роли сервера bulkadmin могут выполнять инструкцию BULK INSERT.

Я правильно установил Login Properties для проверки подлинности Windows (как показано ниже).. чтобы предоставить общесерверные разрешения для bulkadmin

windows authentication
(источник: iforce.co.nz)

И команда EXEC sp_helpsrvrolemember 'bulkadmin' сообщает мне, что приведенная выше информация была успешной, и у текущего пользователя Michael-PC\Michael есть права bulkadmin.

bulkadmin
(источник: iforce.co.nz)

Но даже если я все настроил правильно, насколько я знаю, я все еще получаю ошибку. выполнение массовой вставки непосредственно из SQL Server Management Studio.

Сообщение 4861, уровень 16, состояние 1, строка 2
Невозможно выполнить массовую загрузку, поскольку файл "C:\Users\Michael\workspace\pydb\data\andrew.out.txt" не может быть открыт. Код ошибки операционной системы 5 (доступ запрещен.).

что не имеет смысла, потому что, очевидно, bulkadmins может выполнить оператор, я должен перенастроить, как работает bulkadmin? (Я так потерян). Есть идеи как это исправить?

4b9b3361

Ответ 1

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

Таким образом, предоставление SQL-сервера доступа к папке решит проблему. enter image description here

Вот как: Перейдите в папку правой кнопкой мыши → properties- > Security tab- > Edit- > Add (в новом окне) → Дополнительно → Найти сейчас. В списке пользователей в результатах поиска найдите что-то вроде SQLServerMSSQLUser $UserName $SQLExpress и нажмите ok, чтобы все открытые диалоги.

Ответ 2

Я не думаю, что переустановка SQL Server исправит это, он просто убьет некоторое время.

  • Подтвердите, что ваша учетная запись пользователя имеет права на чтение соответствующей папки.
  • Используйте инструмент, например Process Monitor, чтобы узнать, какой пользователь пытается получить доступ к файлу.
  • Я предполагаю, что это не Michael-PC\Michael, пытающийся получить доступ к файлу, а скорее учетная запись службы SQL Server. Если это так, то у вас есть как минимум три варианта (но, вероятно, другие):

    а. Установите службу SQL Server для запуска как вы.
    б. Предоставьте доступ учетной записи службы SQL Server к этой папке.
    гр. Поместите файлы куда-нибудь более логичным, если SQL Server имеет доступ или может быть предоставлен для доступа (например, C:\bulk\).

Я предлагаю предположить, что это локальная рабочая станция. Есть определенно более серьезные проблемы с безопасностью в отношении доступа к локальной файловой системе с SQL Server, когда мы говорим о производственной машине, конечно, это все равно может быть в значительной степени смягчено с помощью c. выше - и только предоставление доступа учетной записи службы к папкам, которые вы хотите, чтобы он мог касаться.

Ответ 3

У меня была та же проблема SSIS 2012, и решение заключалось в использовании проверки подлинности Windows. Я использовал проверку подлинности SQL с пользователем sa.

Ответ 4

Попробуйте указать папку (ы), содержащую разрешения чтения файлов в формате CSV и Format File для пользователя MSSQLSERVER (или любого другого пользователя, для которого служба SQL Server установлена ​​на Вход в систему в Службы Windows)

Ответ 5

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

Ответ 6

  1. Перейдите, чтобы запустить run => services.msc => SQL SERVER (MSSQLSERVER) остановить службу
  2. Щелкните правой кнопкой мыши SQL SERVER (MSSQLSERVER) => Свойства => Вкладка "Вход" => Учетная запись локальной системы => ОК
  3. Перезапустите SQL Server Management Studio.

Ответ 7

Убедитесь, что файл, который вы используете ('C:\Users\Michael\workspace\pydb\data\andrew.out.txt'), находится на компьютере с SQL-сервером, а не на клиентской машине, на которой работает MSSMS.

Ответ 8

1) Откройте SQL 2) В диспетчере задач вы можете проверить, какая учетная запись выполняет SQL - вероятно, это не Michael-PC\Michael, как писал Ян.

Учетная запись, которая запускает SQL, должна иметь доступ к общей папке.

Ответ 9

Я пришел к аналогичному вопросу, когда выполняю массовую вставку в SSMS, которая работает, но она не удалась и вернулась с кодом ошибки операционной системы 5 при преобразовании задачи в агент SQL Server.

После просмотра множества решений, опубликованных ранее, этот способ решил мою проблему, предоставив NT SERVER/SQLSERVERAGENT право полного доступа к исходной папке. Надеюсь, что это поможет некоторым людям, которые до сих пор борются с сообщением об ошибке,

Ответ 10

В нашем случае это оказалось проблемой Kerberos. Чтобы устранить проблему, я выполнил действия, описанные в этой статье: https://techcommunity.microsoft.com/t5/SQL-Server-Support/Bulk-Insert-and-Kerberos/ba-p/317304.

Все сводилось к настройке делегирования для учетной записи компьютера SQL Server, на котором выполняется инструкция BULK INSERT. Учетная запись компьютера должна иметь возможность делегировать через службу "cifs" файловый сервер, на котором находятся файлы. Если вы используете ограниченное делегирование, обязательно укажите "Использовать любой протокол аутентификации".

Если задействован DFS, вы можете выполнить следующую команду Powershell, чтобы получить имя файлового сервера:

Get-DfsnFolderTarget -Path "\\dfsnamespace\share"