Sql Server:如何从存储过程中为非特权用户创建数据库快照?

问题描述 投票:0回答:1

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

我认为可以在过程声明中使用'with execute as owner'。但是,我总是得到以下错误:

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]

有谁知道我怎么能想出一个允许普通用户创建数据库快照的存储过程?

感谢您的帮助!

何塞

sql-server stored-procedures snapshot
1个回答
0
投票

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

方法是使用证书

© www.soinside.com 2019 - 2024. All rights reserved.