授予运行SQL Server作业的权限


22

我在MSSQL Server 2005上有一份工作,希望允许任何数据库用户运行。

我不担心安全性,因为作业实际工作的输入来自数据库表。仅运行作业,而不向该表添加记录将无济于事。

我只是找不到如何授予工作公开权限。

有什么办法吗?在这一点上,我唯一能想到的就是让这项工作持续运行(或按计划进行),但是由于它只需要很少做任何实际工作(也许每几个月一次),我确实希望这项工作能够尽快完成,这似乎不是最佳解决方案。

Answers:


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
您要问的是...“授予工作的公共许可权”
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。
Vérace
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.