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

まだ動かない。同じエラーが発生します。私は、データベースと同様にmsdbデータベースでDoYourJobを作成しようとしましたが、同じ結果になりました。

1
@shaharmo:奇妙なことに、データベースの所有者は誰なのでしょうか?を使用することもできますがwith execute as 'loginname'、それは機能しますか?
アンドマー2009

3

基本的に、アクセス許可が必要ですsp_start_job(アクセス許可セクションを参照)。

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

編集、2012年1月

私が答えてから2年後の匿名のダウン投票の後...

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

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

それから

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

そしてまた

仕事に公共の許可を与える方法が見つかりません

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


1
これは、すべてのユーザーにすべてのジョブを実行する許可を与えませんか?特定のジョブを1つだけ実行する許可を彼らに与えたい。

1
それはあなたが尋ねたものです...「仕事への公共の許可を与える」
-gbn

1

これにより、特定のユーザー(user1)が任意のSql Agentジョブを実行できます。

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 Serverエージェント固定データベースロール」に従って、ロールSQLAgentOperatorRoleを付与しました。

この助けがあなたのケースを解決することを願っています。


あなたがしたことの詳細を教えていただけますか?リンクのみの回答は「眉をひそめている」-リンク腐敗&c。
ベレース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.