Предоставьте разрешения на запуск задания SQL-сервера

22

У меня на сервере MSSQL 2005 есть работа, которую я хочу разрешить запускать любому пользователю базы данных.

Я не беспокоюсь о безопасности, так как входные данные для фактической работы задания поступают из таблицы базы данных. Просто запуск задания без добавления записей в эту таблицу ничего не даст.

Я просто не могу найти, как предоставить публичные разрешения на работу.

Есть какой-либо способ сделать это? Единственное, о чем я могу думать в этот момент, - это постоянно выполнять работу (или по расписанию), но так как для этого нужно выполнять какую-либо реальную работу редко (возможно, раз в несколько месяцев), и я хочу, чтобы работа была сделано, как только оно существует, это не кажется оптимальным решением.

Шахар Мосек
источник

Ответы:

20

Вы можете создать хранимую процедуру, которая запускает задание. Вы можете использовать with execute as ownerдля запуска хранимой процедуры в качестве владельца базы данных. Таким образом, пользователям самим не нужны разрешения sp_start_job.

create procedure dbo.DoYourJob
with execute as owner
as
exec sp_start_job @job_name = 'YourJob'

Предоставить права на выполнение, DoYourJobчтобы позволить людям начать работу.

Конечно, вы также можете поместить содержимое задания в процедуру и предоставить права на ее выполнение. Это позволило бы больше взаимодействия, как отображение текста результата.

Andomar
источник
Это не работает Непривилегированный пользователь может запустить процедуру, но процедура не может выполнить sp_start_job, потому что у пользователя нет прав на ее выполнение. Я не хочу, чтобы содержимое было в процедуре, потому что я не хочу, чтобы вызывающему абоненту приходилось ждать окончания работы.
@shaharmo: Вы можете выполнить хранимую процедуру как владелец базы данных, я отредактирую свой ответ
Andomar
До сих пор не работает. Я получаю ту же ошибку. Я попытался создать DoYourJob в базе данных msdb, а также в моей базе данных, с теми же результатами.
1
@shaharmo: Странно, мне интересно, кто является владельцем базы данных? Вы также можете использовать with execute as 'loginname', это работает?
Andomar
3

В основном, разрешения необходимы для sp_start_job(см. Раздел разрешений).

Роли описаны в разделе « Роли фиксированной базы данных агента SQL Server » (ссылка приведена выше).

Редактировать, январь 2012

Через 2 года после анонимного отката я ответил ...

Прочитайте вопрос. Это говорит

Я хочу разрешить запуск любого пользователя базы данных

тогда

Я не беспокоюсь о безопасности

а также

Я просто не могу найти, как предоставить публичные разрешения на работу

Так что комментарии ОП ниже противоречат вопросу

ГБН
источник
1
Разве это не даст всем пользователям права на запуск всех заданий? Я хочу, чтобы у них было разрешение на выполнение только одной конкретной работы.
1
Что вы и просили ... «предоставить публичные разрешения на работу»
gbn
1

Это позволит конкретному пользователю (user1) запускать любое задание агента Sql.

Члены SQLAgentUserRole и SQLAgentReaderRole могут запускать только те задания, которые им принадлежат. Члены SQLAgentOperatorRole могут запускать все локальные задания, включая те, которые принадлежат другим пользователям.

USE [msdb] GO CREATE USER [user1] FOR LOGIN [user1] GO USE [msdb] GO ALTER ROLE [SQLAgentOperatorRole] ADD MEMBER [user1] GO

drinky
источник
0

У меня есть аналогичная необходимость дать разрешение моему оператору вручную выполнять задачи агента SQL Server. Я следовал за этим постом Агент SQL Server Fixed Database Role для предоставления роли SQLAgentOperatorRole.

Надеюсь, что это поможет решить ваше дело.

Ву Доан
источник
Не могли бы вы описать, что вы сделали? Ответы только на ссылку "осуждаются" - ссылка rot & c.
Верас