Проблема с пустыми разрешениями для файла Excel: SSIS Excel Destination буферизует большие наборы записей через C:\Users\Default
Пакет служб SSIS вызывается через DTEXEC.EXE из веб-приложения. Пакет использует задачу файловой системы для создания копии файла шаблона Excel, который будет использоваться в качестве файла назначения Excel. Затем задача потока данных отправляет записи из источника OLE DB в пункт назначения Excel. Файл назначения Excel затем передается обратно в браузер пользователя веб-приложения.
Это прекрасно работает, когда удостоверение пула веб-приложений является учетной записью локального администратора. Это также работает, когда удостоверением пула веб-приложений является пользователь с ограниченными правами, который, как оказалось, также подключен к Интернету.
Когда удостоверение пула веб-приложений является пользователем с ограниченными правами, который НЕ одновременно входит в систему, возникает проблема. Небольшие файлы Excel (несколько сотен строк) по-прежнему возвращаются правильно. Нет проблем там. Большие файлы Excel (несколько десятков тысяч строк) возвращаются пустыми. В поточном файле нет строк, которые возвращаются в браузер пользователя. Файл назначения, который записан на сервере, также пуст.
Пакет служб SSIS не видит ошибки и сообщает, что через поток данных прошли десятки тысяч записей. Это не проблема с разрешениями на стороне SQL Server. Когда учетной записи пользователя назначается системный администратор SQL Server, он по-прежнему не может записать какие-либо строки в больший целевой файл Excel.
Это похоже на проблему с разрешениями на стороне Windows, возможно, включает в себя запись буфера на диск, поэтому проблема не возникает при обработке всего нескольких сотен строк.
Предполагалось, что буферизации диска можно избежать, увеличив параметры задачи потока данных для DefaultBufferMaxRows (10000 строк) и DefaultBufferSize (10 МБ). Однако, к сожалению, это не работает.
Это решенная проблема, которая публикуется, чтобы помочь любому, кто может столкнуться с подобной проблемой.
2 ответа
Использование Process Monitor показывает, что ISServerExec.exe пытается сохранить буфер в C:\Users\Default\AppData\Local\Microsoft\Windows\Temporary Internet Files. Когда ограниченная учетная запись пользователя получает доступ и разрешения в C:\Users\Default, все работает.
Это объясняет, почему пользователь, вошедший в систему в интерактивном режиме или учетная запись локального администратора, смог записать записи потока данных в файл Excel, но обычная пакетная регистрация не смогла сделать это. Это нежелательное поведение пункта назначения служб SSIS Excel.
Пакет служб SSIS отлично работает в BIDS для загрузки файла Excel с более чем 5000 строками, но завершился неудачно, когда тот же пакет выполняется в задании агента сервера SQL под учетной записью прокси. Основная причина этого заключается в том, что для большого файла SSIS процесс использует C:\Users\ Местоположение по умолчанию для буферизации данных. Таким образом, учетная запись Proxy должна иметь права на запись в эту папку. Пакет отлично работает в JOB тоже после этого...