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

Откуда: Москва
Сообщений: 115
Есть 3-звенное приложение (страница на silverlight, работающее с БД (SQL Server 2008 R2) через WCF-сервис), есть необходимость разместить на одной из страниц данного приложения ссылку на запуск job. Проблема в настройке безопасности - сам сервис работает от имени системного пользователя, который имеет все права на БД, но с самим приложением работают люди, права которых ограничены. Допустим, я выдам права на запуск job только членам определенной роли, но как "протащить" пользователя приложения в скрипт запуска джоба? Есть ли возможность (фантазирую немного) выполнить команду вида execute sp_start_job as %username%?
Или в любом случае эта проблема должна решаться какими-то иными способами?
14 дек 11, 23:30    [11768080]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Glory
Member

Откуда:
Сообщений: 104751
Все уже давно придумано
http://msdn.microsoft.com/ru-ru/library/ms188283.aspx
14 дек 11, 23:37    [11768095]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Nissa
Member

Откуда: Москва
Сообщений: 115
Glory,

Боюсь, это мне не поможет. В стандартном варианте сервер просто не узнает ничего о конкретном пользователе, запустившем задание - оно на сервер пойдет от имени пользователя, под которым работает сервис...
14 дек 11, 23:44    [11768114]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Glory
Member

Откуда:
Сообщений: 104751
Nissa
В стандартном варианте сервер просто не узнает ничего о конкретном пользователе, запустившем задание - оно на сервер пойдет от имени пользователя, под которым работает сервис

И что ? Вы же и хотите _запустить_ задание
По-моему, вы путаете запуск джоба и его выполнение
Шаги джоба выполняются Агентом,под его логином
14 дек 11, 23:48    [11768121]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Nissa
Member

Откуда: Москва
Сообщений: 115
Glory,

да, похоже путаю.
пойду подучу матчасть и завтра конкретезирую вопрос.
Спасибо.
15 дек 11, 00:01    [11768151]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Nissa
Member

Откуда: Москва
Сообщений: 115
А всё решило очень просто:

execute as LOGIN ='Developer'
exec msdb.dbo.sp_start_job testjob

и всё - джоб выполняется от имени 'Developer'...
15 дек 11, 15:18    [11771822]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Glory
Member

Откуда:
Сообщений: 104751
Nissa
А всё решило очень просто:

execute as LOGIN ='Developer'
exec msdb.dbo.sp_start_job testjob

И чем это лучше специально созданных ролей ?
15 дек 11, 15:20    [11771857]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Glory
Member

Откуда:
Сообщений: 104751
Nissa
и всё - джоб выполняется от имени 'Developer'...

Еще раз
Джобы выполняет Агент, а не пользователь, запустивший job
И делает это Агент под своим логином
15 дек 11, 15:22    [11771871]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Nissa
Member

Откуда: Москва
Сообщений: 115
Glory,

Да ничем не лучше - просто в 3-хзвенке я в качестве suser_sname() получу не имя пользователя, фактически запустившего job из преложения, а имя пользователя, под которым запущен WCF-сервис. Поэтому переключение контекста мне поможет (я просто передам имя пользователя из конечно приложения в хранимку в БД), а просто включения пользователя в роль нет.
16 дек 11, 14:16    [11777600]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Glory
Member

Откуда:
Сообщений: 104751
Nissa
Да ничем не лучше - просто в 3-хзвенке я в качестве suser_sname() получу не имя пользователя, фактически запустившего job из преложения, а имя пользователя, под которым запущен WCF-сервис. Поэтому переключение контекста мне поможет (я просто передам имя пользователя из конечно приложения в хранимку в БД), а просто включения пользователя в роль нет.

Если по-вашим словам "сам сервис работает от имени системного пользователя, который имеет все права на БД,", то для чего вы переключаете контексты то ?
16 дек 11, 14:20    [11777644]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Nissa
Member

Откуда: Москва
Сообщений: 115
Glory,

у меня есть 3 пользователя конечной системы, из которых только один имеет право на запуск джоба. При 3-хзвенке информацию о конечном пользователе я потеряю на 2-м уровне (промежуточный сервис) и каждый из 3 пользователей получит возможность запустить джоб. Поэтому мне и надо переключать контекст. Если я переключу контекст на пользователя, который не имеет прав назапуск джоба (что обеспечено его невключением в определенную роль SQL Server), то джоб не запустится. Вот и всё.
16 дек 11, 14:37    [11777839]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Glory
Member

Откуда:
Сообщений: 104751
Nissa
При 3-хзвенке информацию о конечном пользователе я потеряю на 2-м уровне (промежуточный сервис) и каждый из 3 пользователей получит возможность запустить джоб.

Ну так вот это

execute as LOGIN ='Developer'
exec msdb.dbo.sp_start_job testjob

как ваш сервис узнает, кому из 3 ваших конечных пользователей разрешено выполнять ?
16 дек 11, 14:41    [11777888]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Nissa
Member

Откуда: Москва
Сообщений: 115
Glory,

я могу сервису передать логин пользователя, инициирующего запуск джоба. Этот логин можно протащить как обычный параметр в хранимую процедуру.
16 дек 11, 14:46    [11777935]     Ответить | Цитировать Сообщить модератору
 Re: Запуск job из приложения  [new]
Glory
Member

Откуда:
Сообщений: 104751
Nissa
я могу сервису передать логин пользователя, инициирующего запуск джоба. Этот логин можно протащить как обычный параметр в хранимую процедуру.

Вы не поняли
Вопрос не про параметер, а про то как ваш сервис различает пользователей, которым разрешено выполнять этот код
16 дек 11, 14:48    [11777959]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить