Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
lex452 Member Откуда: Сообщений: 588 |
Использую пакеты SSIS со встроенным скриптом. Скрипт копирует файлы из "расшаренных" папок, на локальный диск. Но столкнулся с непониманием с какими правами запускается скрипт. Пакет я запускаю из хранимой процедуры на транзакте. Получается что когда пакет запускается от имени доменного пользователя, из под которого запущен сервер все копируется без проблем. Но когда я запускаю пакет от своего имени (хотя права на файлы у меня тоже есть), то у меня получается ошибка доступа. Поясните пожалуйста под чьими правами запускаются скрипты в пакете? И каким образом можно сделать чтобы они запускались с правами пользователя, который подключился к базе данных? (Sql Server 2017) |
15 мар 19, 15:48 [21833996] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Причем если запустить пакет через задание (job), то он тоже корректно отрабатывает и копирует файлы |
17 мар 19, 16:28 [21835275] Ответить | Цитировать Сообщить модератору |
Alexander Titkin Member Откуда: Москва Сообщений: 91 |
lex452, Запускайте свою хранимку тоже через job, вроде как это единственный способ заставить работать имперсонацию |
17 мар 19, 17:47 [21835294] Ответить | Цитировать Сообщить модератору |
Alexander Titkin Member Откуда: Москва Сообщений: 91 |
Точнее так job->ssis(run as login)->stored procedure->ssis |
17 мар 19, 17:51 [21835296] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Alexander Titkin, проблема в том что пакет с параметрами, и как я понимаю нужно под каждое изменение параметров создавать новое задание, а это подход мне не нравится. Пользователь через ПО запускает хранимку которая запускает пакет с параметрами. А реализовывать это через JOB мне кажется костылем |
17 мар 19, 17:54 [21835298] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Нужно попробовать использовать пользователей уровня приложения, если получится отпишусь |
17 мар 19, 17:55 [21835299] Ответить | Цитировать Сообщить модератору |
Alexander Titkin Member Откуда: Москва Сообщений: 91 |
lex452, Параметры может читать ваша хранимка из таблицы( по сути очередь) и запускать с ними пакет. Приложение просто пихает задачу в очередь. По окончании выставляет задаче Выполнено. Если это не подходит, то копайте в сторону делигирования, double hop и т.п. Проблема именно с этим. Возможно, у вас получится заставит integration servises пробрасывать учетку, запустившую хранимку. |
17 мар 19, 18:42 [21835314] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
lex452, Любая операция делается под каким-то юзером. Пакет запускается либо под юзером службы SSIS, либо если вы специально настраивали, то под конкретным оператором. Эти юзера должны иметь права на файловую систему, в которую лезет пакет. Лучше всего создать специального юзера, сделать под него оператора и дать ему права на папки. |
18 мар 19, 12:30 [21835794] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
a_voronin, Юзера доменного или sql сервера? Как я дам серверному пользователю права на папку? Повторюсь что мне нужно запускать пакет из транзакта |
18 мар 19, 12:43 [21835811] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4807 |
Вы делаете распределенной приложение и пока оно не будет работать под доменным юзероми и пока вы дадите ему права, то ничего работать не будет. Вы понимаете, что есть служба и что она работает под аккаунтом? И что доступ в папку должен быть дан этому аккаунту. И ещё есть оператор -- знаете, что это такое? |
||
18 мар 19, 13:27 [21835889] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
a_voronin, К базе пользователь подключается по windows аутентификации, а что такое оператор я не знаю |
18 мар 19, 13:35 [21835908] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1692 |
lex452, по памяти: запуск ssis пакета это трансляция запуска DtExec.exe в операционную систему. если осуществляется запуск из t-sql аля exec ssisdb.start_execution то у вас DtExec запустится из под учетки службы SQL Server если запускаете джобом SQL Agent, то там в зависимости от того настроено ли использование учетных данных для шага задания. |
18 мар 19, 14:18 [21835969] Ответить | Цитировать Сообщить модератору |
Ferdipux Member Откуда: Москва Сообщений: 584 |
А как вы его запускаете. Через выполнение dtexec в shell, или через создание executiщт в ssisdb и запуска ее потом? |
||
18 мар 19, 15:21 [21836097] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Ferdipux, Через execution id. Просто ситуация дурацкая. Я подключаюсь к серверу под своим доменным пользователем, права на файлы у меня есть. Но скрипт пакета их не копирует |
18 мар 19, 19:40 [21836487] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Добавлю пару моментов, которые окончательно ставят меня в тупик. Создал скрипт в пакете, который показывает имя пользователя и копирует файл по сетевому пути на локальный диск. Пакет запускаю через transact-sql. Подключаюсь к серверу под доменной учеткой. Когда запускаю на своем компьютере, получаю ошибку нет доступа к файлу, когда захожу на сервер через удаленный рабочий стол, тоже под своей доменной учеткой, и выполняю скрипт запуска пакета, то файл копируется. В обоих случаях скрипт выводит мое доменной имя пользователя. Пакет развернут в SSIS catalog. Не понимаю как такое возможно, что под одной и той же учеткой, на одном и том же SQL сервере получаются разные результаты??? |
23 мар 19, 16:45 [21841711] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
1. Так, значит, скрипт - это скрипт-таск в dts пакете, да? В нём на C# что то написано. 2. "Показывает имя пользоователя" - куда показывает, пишет в какую то таблдицу/лог? 3. "Пакет запускаю через transact-sql" - это что значит? Например, xm_cmdshell 'DTExec.exe ...'? Или ещё как то? 4. "Когда запускаю на своем компьютере" - имеется в виду "запускаю SSMS на своем компьютере и запускаю пакет тем же скриптом на transact-sql"? 5. "захожу на сервер через удаленный рабочий стол ... выполняю скрипт запуска пакета" - имеется в виду "запускаю SSMS и запускаю пакет тем же скриптом на transact-sql"? |
||
23 мар 19, 19:25 [21841751] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
Если вслух произнести "execution id", пакет не запустится, явно нужно что то ещё сделать :-) |
||
23 мар 19, 19:27 [21841753] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Хм, какая то фантастическая история :-) 1. Так, значит, скрипт - это скрипт-таск в dts пакете, да? В нём на C# что то написано. 2. "Показывает имя пользоователя" - куда показывает, пишет в какую то таблдицу/лог? 3. "Пакет запускаю через transact-sql" - это что значит? Например, xm_cmdshell 'DTExec.exe ...'? Или ещё как то? 4. "Когда запускаю на своем компьютере" - имеется в виду "запускаю SSMS на своем компьютере и запускаю пакет тем же скриптом на transact-sql"? 5. "захожу на сервер через удаленный рабочий стол ... выполняю скрипт запуска пакета" - имеется в виду "запускаю SSMS и запускаю пакет тем же скриптом на transact-sql"?[/quot] Declare @execution_id bigint EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Package.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'Deployed Projects', @project_name=N'Integration Services Project1', @use32bitruntime=False, @reference_id=Null Select @execution_id DECLARE @var0 smallint = 1 EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0 EXEC [SSISDB].[catalog].[start_execution] @execution_id GO 1. Да скрипт на C# 2. Я создаю файл с именем пользователя File.Create(Environment.UserName) 3. Привел пример выше 4. Да, запускаю SSMS на своем компьютере и запускаю пакет тем же скриптом на transact-sql и второй вариант запускаю SSMS на самом сервере к которому подключен через удаленный рабочий стол и запускаю пакет тем же скриптом на transact-sql |
23 мар 19, 19:58 [21841762] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
select @@SERVERNAME, SUSER_NAME(), SYSTEM_USER |
||
23 мар 19, 21:37 [21841778] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Не совсем понимаю, зачем? Имя сервера и так известно, а скрипт я запускаю под одним и тем же пользователем. я проверял ORIGINAL_login он одинаковый. |
||||
23 мар 19, 21:42 [21841780] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
В 99% случаев такое заканчивается через 3 дня исследований тем, что "ой, а я же на другом сервере запустил", "ой, а я же там под другим логином". Но можно, конечно, не вставлять, съэкономить 2 секунды, и заняться дизассемблированоем ядра :-) |
||
23 мар 19, 21:55 [21841787] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
alexeyvg, Хорошо, я попробую. Просто этот пакет развернут только на одном сервере. И я подключаюсь под доменным пользователем, так как пользователей sql там в принципе нет |
23 мар 19, 21:58 [21841788] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31779 |
Да, а как вы получаете ошибку? В логах выполнения смотрите? Вдруг смотрите не те логи/не последние записи? |
||
23 мар 19, 22:03 [21841789] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Я в скрипте File.Copy обернул в try catch, так и получаю ошибку доступа. ex.Message пишу в файл, вот и вся магия. В логи вообще не смотрю |
||||
23 мар 19, 22:07 [21841790] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Проверил как вы предложили. В обоих вариантах все одинаково. Если вдруг важно, проблема возникает только с сетевыми ресурсами. То есть когда поменял еще и конечный путь на сетевой диск, скрипт начал ругаться и на него |
||||
25 мар 19, 12:57 [21842692] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |