SQL Server:如何从存储过程中为非特权用户创建db快照?

时间:2019-04-16 18:23:04

标签: sql-server stored-procedures snapshot

我正在尝试创建一个存储过程,该过程为非特权用户创建了dB快照。 这个想法是向普通用户提供一种创建dB快照的方法,以便对其执行查询并在完成快照后删除快照。

我认为可以在过程声明中使用“与所有者一起执行”,但是,我总是遇到以下错误:

CREATE DATABASE permission denied in database 'master'.

这是我的代码:

    -- The user that create the sp has sysadmin right
    CREATE OR ALTER PROCEDURE [dbo].[makeSnapshot] WITH EXECUTE AS OWNER
    AS
        -- just an extract of the code (should test if exist...)
        DECLARE @exec NVARCHAR(2000)
        set @exec = 'CREATE DATABASE test_dbss1900 ON  ( NAME = test, FILENAME =   
                    ''C:\\Program Files\\Microsoft SQL Server\\MSSQL14.SQLSERVER2017\\MSSQL\\Data\\test_1900.ss'' )  AS SNAPSHOT OF test';  
        EXEC (@exec)
    GO

    -- try to execute it (with any user)
    EXEC dbo.[makeSnapshot]

有人知道我如何提出一个存储过程,该过程将允许普通用户创建数据库快照吗?

感谢您的帮助!

何塞

1 个答案:

答案 0 :(得分:0)

我实际上通过查看-http://www.sommarskog.se/grantperm.html#serverlevel(第5.3章)找到了解决方案

方法是使用证书