Надати дозволи для запуску завдання на сервері 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щоб дозволити людям розпочати роботу.

Звичайно, ви також можете помістити вміст завдання в процедуру і надати права на його виконання. Це дозволило б більше взаємодії, як-от показ тексту результату.


Це не працює. Непривілейований користувач може запустити процедуру, але процедура не може виконати sp_start_job, оскільки у користувача немає дозволів на її виконання. Я не хочу, щоб вміст знаходився в процедурі, тому що я не хочу, щоб абонент потребував очікування завершення роботи.

@shaharmo: Ви можете виконати збережену процедуру як власника бази даних, я відредагую свою відповідь
Andomar

Ще не працює. Я отримую ту ж помилку. Я намагався створити DoYourJob в базі даних msdb, а також у своїй базі даних, з однаковими результатами.

1
@shaharmo: Дивно, мені цікаво, хто власник бази даних? Ви також можете використовувати with execute as 'loginname', це працює?
Андомар

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


0

У мене є аналогічна потреба надати дозволу для мого оператора вручну виконувати завдання агента SQL Server. Я дотримувався цієї посади Ролі бази даних фіксованої бази даних агента SQL для надання ролі SQLAgentOperatorRole.

Сподіваємось, це допоможе вирішити вашу справу.


Не могли б ви докласти деталі того, що ви робили? Відповіді лише на посилання "нахмурені" - посилання гниття та с.
Vérace
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.