我正在努力解决以下问题。我先简要介绍一下基础设施。
我的基础设施
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的权限已被拒绝。
我非常感谢任何建议。特别是,如果有更好的方法。
提前致谢!
答案 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个还原作业。