3

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

这意味着,该角色的用户将不允许执行自定义查询,但可以运行具有 CRUD 和 SysAdmin 语句的存储过程——UPDATES、DELETES、ALTER、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

但是我需要做什么才能允许TRUNCATEand DROP INDEX

4

1 回答 1

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

如果您的 proc 将数据插入到表中,并且它们不会破坏对象的所有权链,那么您应该可以使用此设置。与用户一起尝试:

SELECT * FROM dbo.test --sucess
INSERT INTO dbo.test(id)VALUES(1) -- fail
EXEC INSERTtest  --sucess
于 2013-07-19T12:44:56.660 回答