MSSQL:使用最少的用户权限启动预定义的数据库还原任务

时间:2015-07-08 12:11:47

标签: php sql-server

我正在努力解决以下问题。我先简要介绍一下基础设施。

我的基础设施

  • MSSQL Server 2012

  • IIS上的PHP 5.4.24

MSSQL和PHP之间的通信工作正常。

在MSSQL Server上,我有两个数据库用于生产(P),一个用于测试(T)。 在工作日的每个晚上,我都在备份P并将P恢复到T以获得一组新的数据。此任务由SQL Server代理中的作业完成。

备份的一项任务,一项恢复任务。

我的开发人员需要未经更新的P备份数据,以方便他们的开发工作。他们不能总是等到工作在晚上运行。

因此我想提供一种方法,他们可以触发从最新的P本身恢复的任务。

这可以通过声明此处提到的查询来完成:  EXEC msdb.dbo.sp_start_job 'Update development'

现在的问题是,出于安全原因,我希望MSSQL用户U具有最小的首选项来在测试数据库上运行此作业。我使用数据写入器访问权限为测试数据库创建了U.

我还跟着一个提示来围绕作业包装存储过程:

    CREATE PROCEDURE dbo.UpdateTestDatabase WITH EXECUTE AS owner AS EXEC  msdb.dbo.sp_start_job 'Update testingDatabase';

最后,我还为U设置了存储过程的EXECUTE权限,但我仍然收到以下错误:

Die EXECUTE-Berechtigung wurde für das sp_start_job-Objekt, msdb-Datenbank, dbo-Schema, verweigert.

翻译:EXECUTE-sp_start_job-Object,msdb-Database,dbo-Schema的权限已被拒绝。

我非常感谢任何建议。特别是,如果有更好的方法。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我的建议是一个技巧:在具有单个列的开发人员可访问的数据库服务器上创建一个表,安排一个作业每15分钟读取一次该表,如果该表中有正确的值,那么预定的作业将执行从PRO恢复到DEV。

安排的程序可能就像是:

if exists(select field from table where field='dorestore')
 EXEC  msdb.dbo.sp_start_job 'Update testingDatabase';

该工作可以限制在工作日8/18运行。

这不是一个交互式解决方案,并不是最佳解决方案,但开发人员不需要做任何事情,只需在表格中设置一个字段,就可以使用预期的凭证自动启动作业。

Q&安培; d

注意:仔细检查任务设置,确保无法同时运行2个还原作业。