我在MSSQL Server 2005上有一份工作,希望允许任何数据库用户运行。
我不担心安全性,因为作业实际工作的输入来自数据库表。仅运行作业,而不向该表添加记录将无济于事。
我只是找不到如何授予工作公开权限。
有什么办法吗?在这一点上,我唯一能想到的就是让这项工作持续运行(或按计划进行),但是由于它只需要很少做任何实际工作(也许每几个月一次),我确实希望这项工作能够尽快完成,这似乎不是最佳解决方案。
我在MSSQL Server 2005上有一份工作,希望允许任何数据库用户运行。
我不担心安全性,因为作业实际工作的输入来自数据库表。仅运行作业,而不向该表添加记录将无济于事。
我只是找不到如何授予工作公开权限。
有什么办法吗?在这一点上,我唯一能想到的就是让这项工作持续运行(或按计划进行),但是由于它只需要很少做任何实际工作(也许每几个月一次),我确实希望这项工作能够尽快完成,这似乎不是最佳解决方案。
Answers:
您可以创建一个运行该作业的存储过程。您可以用来with execute as owner
以数据库所有者的身份运行存储过程。这样,用户本身就不需要许可sp_start_job
。
create procedure dbo.DoYourJob
with execute as owner
as
exec sp_start_job @job_name = 'YourJob'
授予执行权DoYourJob
以允许人们开始工作。
当然,您也可以将作业的内容放在一个过程中,并授予运行它的权限。这样可以进行更多的交互,例如显示结果文本。
with execute as 'loginname'
,行得通吗?
基本上,需要权限sp_start_job
(请参阅权限部分)。
在“ SQL Server代理固定数据库角色 ”(从上面链接)中描述了这些角色。
编辑,2012年1月
在我匿名回答2年后...
阅读问题。它说
我想允许任何数据库用户运行
然后
我不担心安全性
并且
我只是找不到如何授予工作公开权限
所以OP下面的评论与这个问题矛盾
我同样需要授予操作员手动执行SQL Server代理任务的权限。我按照这篇文章《 SQL Server代理固定数据库角色》授予角色SQLAgentOperatorRole。
希望这有助于解决您的情况。