我可以为SET IDENTITY_INSERT提供存储过程权限吗?

noe*_*cus 4 sql sql-server stored-procedures

我有一个存储过程,我想授予插入标识的权限,同时不给予受限用户调用ALTER TABLE权限.那可能吗?

这是我的存储过程:

CREATE PROCEDURE [dbo].[AddInternalQu] 
(
    @id [int],
    @qu [nvarchar](500),
    @pg [nvarchar](50),
    @isactive [bit],
    @isdoc [bit],
    @allowNA [bit],
    @textBox [bit],
    @redf [bit],
    @qord [int],
    @shqu [nvarchar](50),
    @restrict [bit],
    @scanwizard [bit]
)
AS
BEGIN
    SET IDENTITY_INSERT [questions] ON;

    INSERT INTO [questions] (qu_id, question, shortqu, redflag, page, active, is_doc_qu, 
                             allowNA, textBox, qu_order, scanwizard, restricted) 
    VALUES(@id, @qu, @shqu, @redf, @pg, @isactive, @isdoc, 
           @allowNA, @textBox, @qord, @scanwizard, @restrict);

    SET IDENTITY_INSERT [questions] OFF;
END

GRANT EXEC ON AddInternalQu TO MyStandardRole;
Run Code Online (Sandbox Code Playgroud)

因为它是一个用户,我添加到该MyStandardRole角色有权执行存储过程,但后来尝试设置没有足够权限的身份插入失败.

Jim*_* V. 7

"执行作为所有者"应该做的伎俩.

CREATE PROCEDURE [dbo].[AddInternalQu] 
(
    @id [int],
    @qu [nvarchar](500),
    @pg [nvarchar](50),
    @isactive [bit],
    @isdoc [bit],
    @allowNA [bit],
    @textBox [bit],
    @redf [bit],
    @qord [int],
    @shqu [nvarchar](50),
    @restrict [bit],
    @scanwizard [bit]
)
WITH EXECUTE AS OWNER
AS
BEGIN
    SET IDENTITY_INSERT [questions] ON;

    INSERT INTO [questions] (qu_id, question, shortqu, redflag, page, active, is_doc_qu, 
                             allowNA, textBox, qu_order, scanwizard, restricted) 
    VALUES(@id, @qu, @shqu, @redf, @pg, @isactive, @isdoc, 
           @allowNA, @textBox, @qord, @scanwizard, @restrict);

    SET IDENTITY_INSERT [questions] OFF;
END

GRANT EXEC ON AddInternalQu TO MyStandardRole;
Run Code Online (Sandbox Code Playgroud)