web-dev-qa-db-ja.com

SQLサーバージョブを実行する権限を付与する

MSSQLサーバー2005で、どのデータベースユーザーにも実行を許可したいジョブがあります。

ジョブの実際の作業への入力はデータベーステーブルから行われるため、セキュリティについては心配していません。テーブルにレコードを追加せずにジョブを実行するだけでは何も起こりません。

ジョブにパブリックアクセス許可を付与する方法が見つかりません。

これを行う方法はありますか?この時点で私が考えることができる唯一のことは、ジョブを継続的に(またはスケジュールに従って)実行することですが、実際の作業はめったに(おそらく数か月に1回)行う必要があり、それが存在するとすぐに行われますが、これは最適な解決策ではないようです。

22
Shahar Mosek

ジョブを実行するストアドプロシージャを作成できます。 with execute as ownerを使用して、データベース所有者としてストアドプロシージャを実行できます。こうすることで、ユーザー自身がsp_start_jobの権限を必要としません。

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

DoYourJobに対する実行権限を付与して、ユーザーがジョブを開始できるようにします。

もちろん、ジョブの内容をプロシージャに入れて、それを実行する権限を与えることもできます。これにより、結果テキストの表示など、より多くの操作が可能になります。

20
Andomar

基本的に、許可は sp_start_job (権限セクションを参照)。

ロールは「 SQL Serverエージェントの固定データベースロール 」で説明されています(上記からリンクされています)

編集、2012年1月

私が答えてから2年後の匿名の反対投票の後...

質問を読んでください。それは言う

すべてのデータベースユーザーに実行を許可したい

その後

私はセキュリティについて心配していません

そしてまた

ジョブにパブリックアクセス許可を付与する方法が見つからない

下のOPのコメントは質問と矛盾します

3
gbn

これにより、特定のユーザー(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

1
drinky

オペレーターがSQL Serverエージェントタスクを手動で実行するためのアクセス許可を付与する同様の必要性があります。私はこの投稿 SQL Serverエージェントの固定データベースロール に従って、ロールSQLAgentOperatorRoleを付与しました。

これがあなたのケースを解決するのに役立つことを願っています。

0
Vu Doan