SQL Server - 仅执行存储过程角色

时间:2013-07-19 11:40:06

标签: sql-server database-administration

如何创建只能运行SELECT个查询和存储过程的自定义SQL Server数据库服务器角色?

意思是,不允许此角色的用户执行自定义查询,但可以运行具有CRUD和SysAdmin语句的存储过程 - UPDATES,DELETES,ALTERS,DROPS。

我尝试创建此自定义角色,但在运行改变表格的SP时失败了。

CREATE ROLE SupportStaff
GRANT SELECT TO SupportStaff
GRANT EXECUTE TO SupportStaff

有什么想法吗?

更新

好的,所以我发现上面的代码允许使用INSERT / UPDATE / DELETE语句存储过程。但它不允许使用ALTER,TRUNCATE或DROP INDEX语句。

对于ALTER,我只需要添加GRANT ALTER TO SupportStaff

但是,我需要做些什么才能允许TRUNCATEDROP INDEX

1 个答案:

答案 0 :(得分:4)

创建一个角色并使其成为db_datareader的成员,然后分别为每个过程添加EXECUTE权限。用户名为test且该角色成员的示例。以管理员身份运行:

CREATE TABLE test (id INT)
GO

CREATE PROCEDURE INSERTtest
AS
begin
INSERT INTO dbo.test
        (id)
VALUES
        (1)
END
GO  

GRANT EXECUTE ON dbo.INSERTtest TO test
GO

如果您的procs将数据插入到表中,并且它们没有破坏对象的所有权链,那么您应该没有这个设置。请与用户一起尝试:

SELECT * FROM dbo.test --sucess
INSERT INTO dbo.test(id)VALUES(1) -- fail
EXEC INSERTtest  --sucess