powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Третьяков
6 сообщений из 6, страница 1 из 1
Третьяков
    #32027116
Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
W2000 SP2, SQL 7.0 SP2
Есть хранимая процедура
CREATE PROCEDURE us_Job_st
AS
exec msdb..sp_start_job @job_name = 'Test'

Если администратор выполняет ее то все работает.
Job 'Test' started successfully.

Если обычный пользователь (только public) ее выполняет (ему разрешено ее выполнять хранимую процедуру) то пишет
Server: Msg 14262, Level 16, State 1, Procedure sp_verify_job_identifiers, Line 61
The specified @job_name ('Test') does not exist.
И действительно в msdb.dbo.sysjobs_view если смотреть под пользователем ничего нет,
есть способ запустить обычному пользователю этот Job?

Заранее признателен всем кто откликнется!
...
Рейтинг: 0 / 0
Третьяков
    #32027118
Александр Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел в
CREATE VIEW sysjobs_view
AS
SELECT *
FROM msdb.dbo.sysjobs
WHERE (owner_sid = SUSER_SID())
OR (ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) = 1)
OR (ISNULL(IS_MEMBER(N'TargetServersRole'), 0) = 1)

поставил коментарий на /*where*/
и все заработало, но не люблю я в чужом менять притом возможно это повлечет за собой ... .
Есть ли правильный виход?
...
Рейтинг: 0 / 0
Третьяков
    #32027132
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BOL - Transact-SQL Reference - sp_start_job

"A user who is not a member of the sysadmin role can use sp_start_job to start only the jobs he/she owns."
...
Рейтинг: 0 / 0
Третьяков
    #32027152
Александр Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Glory!
Я был невнимателен, это написано и здесь
WHERE (owner_sid = SUSER_SID())
OR (ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) = 1)
OR (ISNULL(IS_MEMBER(N'TargetServersRole'), 0) = 1)
Но должен же быть выход, не менять же код sysjobs_view, единственный вариант который я вижу это, переписать sp_start_job (назвать sp_start_job1) и в ньом не проверять , sp_verify_job_identifiers, подразумевать что Job точно есть.
...
Рейтинг: 0 / 0
Третьяков
    #32027158
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если все-таки сделать пользователя владельцем Job-a?
...
Рейтинг: 0 / 0
Третьяков
    #32027166
Александр Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таких пользователей есть несколько,
я реализую это так:
1. переписываем sp_start_job и называем sp_start_job1, в нет проверки sp_verify_job_identifiers,
2. CREATE PROCEDURE us_Job_st @id int
AS
if @i=1
exec msdb..sp_start_job1 @job_name = 'Test'
if @i=2
exec msdb..sp_start_job1 @job_name = 'Test1'
...
Я не думаю что это причинит ущерб безопасности.
Еще раз спасибо Glory.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Третьяков
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]