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

Raf*_*rty 3 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
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

更新

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

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

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

Die*_*ego 5

创建一个角色并使其成为 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
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM dbo.test --sucess
INSERT INTO dbo.test(id)VALUES(1) -- fail
EXEC INSERTtest  --sucess
Run Code Online (Sandbox Code Playgroud)