Mám na svém serveru MSSQL 2005 práci, kterou chci povolit spuštění kteréhokoli uživatele databáze.
Nemám obavy o bezpečnost, protože vstup do skutečné práce úlohy pochází z databázové tabulky. Pouhé spuštění úlohy bez přidání záznamů do této tabulky nic nedělá.
Nemohu jen najít, jak udělit veřejné oprávnění k této úloze.
Existuje nějaký způsob, jak to udělat? Jediné, na co v tomto bodě mohu myslet, je mít práci neustále v chodu (nebo podle plánu), ale protože potřebuje nějakou skutečnou práci jen zřídka (možná jednou za několik měsíců) a já chci, aby byla tato práce jakmile existuje, nezdá se, že by to bylo optimální řešení.
Mohli byste vytvořit uloženou proceduru, která úlohu spustí. Můžeš použít with execute as owner
pro spuštění uložené procedury jako vlastníka databáze. Tímto způsobem sami uživatelé nepotřebují povolení k sp_start_job
.
create procedure dbo.DoYourJob
with execute as owner
as
exec sp_start_job @job_name = 'YourJob'
Udělte vykonávací práva na DoYourJob
, aby lidé mohli zahájit úlohu.
Samozřejmě můžete také vložit obsah úkolu do postupu a udělit mu práva ke spuštění. To by umožnilo více interakce, například zobrazení výsledného textu.
V zásadě jsou oprávnění sp_start_job
(viz sekce oprávnění).
Role jsou popsány v " SQL Server Agent Fixed Database Roles " (propojené shora)
Upravit, leden 2012
Po anonymním downvote 2 roky poté, co jsem odpověděl ...
Přečtěte si otázku. Říká
Chci povolit spuštění libovolného uživatele databáze
pak
Nebojím se o bezpečnost
a také
Nemohu jen najít, jak udělit veřejné oprávnění k této úloze
Takže komentáře OP níže jsou v rozporu s otázkou
To umožní konkrétnímu uživateli (user1) spustit jakoukoli úlohu agenta Sql.
Členové SQLAgentUserRole a SQLAgentReaderRole mohou spouštět pouze úlohy, které vlastní. Členové SQLAgentOperatorRole mohou spouštět všechny místní úlohy, včetně těch, které vlastní jiní uživatelé
USE [msdb] GO CREATE USER [user1] FOR LOGIN [user1] GO USE [msdb] GO ALTER ROLE [SQLAgentOperatorRole] ADD MEMBER [user1] GO
Mám podobnou potřebu udělit svému operátorovi oprávnění k ručnímu provádění úloh agenta serveru SQL. Sledoval jsem tento příspěvek SQL Server Agent Fixed Database Roles , abych udělil roli SQLAgentOperatorRole.
Doufám, že to pomůže vyřešit váš případ.