Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как грамотно выполнить sp_start_job  [new]
gawsik
Member

Откуда:
Сообщений: 11
Здравствуйте!

создаю пользовательскую хранимую процедуру

USE [test]
GO
/****** Object: StoredProcedure [dbo].[usp_billing] Script Date: 08/25/2009 15:07:37 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_billing] AS

EXEC msdb..sp_start_job @job_name = 'Тестовое задание'

запускаю процедуру из под роли приложения которая находиться в БД test
EXEC usp_billing
в ответ система ругается на то что у пользователя отсутствуют права на выполнение хранимой процедуры sp_start_job

Вопрос как можно дать права пользователю или роли приложения одной базы выполнить хранимую процедуру sp_start_job, которая находиться в БД MSDB
25 авг 09, 12:21    [7576559]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Какие права необходимы для запуска sp_start_job указано в BOL в статье по ней. А вот запустить ее из под роли приложения не получится, ибо роль приложения - это объект конекретной бд, а Вам нужны привилегии фиксированных роле бд msdb.
25 авг 09, 12:50    [7576729]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
gawsik
Member

Откуда:
Сообщений: 11
Я предполагал что это так и есть,
тогда какой выход может быть, может быть есть какая то наработанная методика
я сделал так:

через табличку в которую ролью приложения по нажатию кнопки в приложении записывается значение ФЛАГА и настроил запуск задания через каждый час, как только значение флага становиться = допустим 1, то запускается моя "главная" процедура запускающая "главное" задание

Очень это как то топорно, хочется более красивого решения, но я перекопал много материалов нашел материал про цепочки владения, ничего подходящего не нашел, может все таки есть какое то решение, через переменные или еще что то
25 авг 09, 13:21    [7576886]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Не совсем понятно, какую задачу Вы пытаетесь решить?!
25 авг 09, 14:01    [7577132]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
gawsik
Member

Откуда:
Сообщений: 11
Я создал пакет SSiS, он необходим для переброски данных из Oracle в MS SQL

Помещаю запуск этого пакета в задание:
EXEC xp_cmdshell 'dtexec /f "C:\Project\Тестовый пакет\Тестовый пакет\Тестовый пакет.dtsx"'


Теперь мне необходимо чтобы пользователь из приложения мог запустить это задание, я помещаю запуск этого задания в процедуру:

EXEC msdb..sp_start_job @job_name = 'Прием данных'

на этом этапе возникают проблемы с доступом к sp_start_job
26 авг 09, 05:40    [7580007]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
gawsik
на этом этапе возникают проблемы с доступом к sp_start_job
И как эти проблемы звучат?
26 авг 09, 06:33    [7580025]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
Glory
Member

Откуда:
Сообщений: 104760
gawsik
Я создал пакет SSiS, он необходим для переброски данных из Oracle в MS SQL

Помещаю запуск этого пакета в задание:
EXEC xp_cmdshell 'dtexec /f "C:\Project\Тестовый пакет\Тестовый пакет\Тестовый пакет.dtsx"'


Теперь мне необходимо чтобы пользователь из приложения мог запустить это задание, я помещаю запуск этого задания в процедуру:

EXEC msdb..sp_start_job @job_name = 'Прием данных'

на этом этапе возникают проблемы с доступом к sp_start_job

Невозможно выполнить какие то действия на сервере без клиентского приложения.
Которое откроет коннект и передаст серверу команду на выполнение
Хотите - пишите свое приложение, хотите - используйте уже кем-то написанное
Для запуска пакетов из командной строки есть стандартная утилита dtexec
Для запуска скриптов из командной строки есть стандартная утилита sqlcmd
26 авг 09, 10:25    [7580449]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
gawsik
Member

Откуда:
Сообщений: 11
Прикрепил скриншот ошибочки

К сообщению приложен файл. Размер - 0Kb
26 авг 09, 11:09    [7580784]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
gawsik
Member

Откуда:
Сообщений: 11
с этими командами я знаком.
меня интересует есть ли какой то прямой или обходной способ делегировать права выполнения системной хранимой процедуры одной БД для пользователя другой БД.
26 авг 09, 11:19    [7580844]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
gawsik
с этими командами я знаком.
меня интересует есть ли какой то прямой или обходной способ делегировать права выполнения системной хранимой процедуры одной БД для пользователя другой БД.


Как мне казалось, Вам уже говорилось, где можно посмотреть, какие права нужны.
26 авг 09, 11:21    [7580858]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Автор хочет дать права простому смертному на выполение одной определенной джобы, и не более того. Это было понятно из его первого поста.
26 авг 09, 12:05    [7581084]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Deff
Автор хочет дать права простому смертному на выполение одной определенной джобы, и не более того. Это было понятно из его первого поста.


а во втором посте автору было сказано, что можно сделать.
26 авг 09, 12:45    [7581403]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
pkarklin
Deff
Автор хочет дать права простому смертному на выполение одной определенной джобы, и не более того. Это было понятно из его первого поста.


а во втором посте автору было сказано, что можно сделать.
Действительно, почитал я бол. Насколько я понял, задача решается. Можно дать права на конкретные джобы.
26 авг 09, 13:43    [7581842]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
gawsik
Member

Откуда:
Сообщений: 11
Каким образом можно дать права на конкретный джоб и что это даст если он у меня запускается через хранимую процедуру на которую прав упользователя нет
27 авг 09, 05:39    [7584555]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
gawsik
Каким образом можно дать права на конкретный джоб и что это даст если он у меня запускается через хранимую процедуру на которую прав упользователя нет
В БОЛе на sp_start_job написано.
БОЛ
By default, members of the sysadmin fixed server role can execute this stored procedure. Other users must be granted one of the following SQL Server Agent fixed database roles in the msdb database:
SQLAgentUserRole

SQLAgentReaderRole
SQLAgentOperatorRole

For details about the permissions of these roles, see SQL Server Agent Fixed Database Roles.

Members of SQLAgentUserRole and SQLAgentReaderRole can only start jobs that they own. Members of SQLAgentOperatorRole can start all local jobs including those that are owned by other users. Members of sysadmin can start all local and multiserver jobs.
27 авг 09, 07:10    [7584607]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
gawsik
Member

Откуда:
Сообщений: 11
пользователь (роль приложения) который(ая) должен запустить sp_start_job находиться в БД test, не получилось у меня включить моего многострадального пользователя в члены роли БД msdb указанные в БОЛ, они просто не видятся из моей пользовательской БД test
27 авг 09, 09:33    [7584905]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Дык, не может пользователь одной бд входить в роли другой бд.
27 авг 09, 10:23    [7585122]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
Glory
Member

Откуда:
Сообщений: 104760
gawsik
пользователь (роль приложения) который(ая) должен запустить sp_start_job находиться в БД test, не получилось у меня включить моего многострадального пользователя в члены роли БД msdb указанные в БОЛ, они просто не видятся из моей пользовательской БД test

Потому что пользователи - они только в пределах своей базы существуют. И их нельзя включить в роли других баз. А вот логины как раз можно
27 авг 09, 10:24    [7585131]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
gawsik
Member

Откуда:
Сообщений: 11
pkarklin
Дык, не может пользователь одной бд входить в роли другой бд.


[/quot]Потому что пользователи - они только в пределах своей базы существуют. И их нельзя
включить в роли других баз. А вот логины как раз можно[/quot]

Господа, мне все это понятно, вопрос как раз в том и состоит изначально - что в такой ситуации делать? Ведь хочу заметить что запустить хранимую процедуру мне надо даже не из под пользователя у которого мог бы быть сопоставленный логин, (такой вариант я пробовал - ругается на принципала, с этим надо разбираться. почитать) а запускать хранимую процедуру в БД msdb надо из под роли приложения, вот здесь то у меня сомнения, либо определенно есть способ запустить системную хранимую процедуру sp_start_job от имени роли приложения используя стандартный функционал MS SQL, либо такого способа нет и надо искать обходной путь, собственно поэтому и обратился на форум - чтобы понять стоит ли долбиться в эту сторону, или может быть у кого то были похожие ситуации и есть наработанные способы
27 авг 09, 12:56    [7586117]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
Glory
Member

Откуда:
Сообщений: 104760
gawsik


Господа, мне все это понятно, вопрос как раз в том и состоит изначально - что в такой ситуации делать? Ведь хочу заметить что запустить хранимую процедуру мне надо даже не из под пользователя у которого мог бы быть сопоставленный логин, (такой вариант я пробовал - ругается на принципала, с этим надо разбираться. почитать) а запускать хранимую процедуру в БД msdb надо из под роли приложения, вот здесь то у меня сомнения, либо определенно есть способ запустить системную хранимую процедуру sp_start_job от имени роли приложения используя стандартный функционал MS SQL, либо такого способа нет и надо искать обходной путь, собственно поэтому и обратился на форум - чтобы понять стоит ли долбиться в эту сторону, или может быть у кого то были похожие ситуации и есть наработанные способы

Пока вы не поймете, что при обращении к объектам других баз действуют логины, а не пользователи и роли приложения, ничего у вас не должно получится.
27 авг 09, 12:58    [7586137]     Ответить | Цитировать Сообщить модератору
 Re: Как грамотно выполнить sp_start_job  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
gawsik,

Мне казалось, что тема с ролью приложения была закрыта еще в первом ответе в этой теме. Делайте "как всегда":

1. В табличке взводите "флаг", что необходим запуск джоба.
2. Джобом раз в минуту читайте этот "флаг" и запускайте обработку, если он ввзеведен.
3. После обработки снимайте "флаг".

ЗЫ.Флагом может служить запись с именем джоба.
27 авг 09, 13:30    [7586362]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить