gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:50:59 25 4
gpt4 key购买 nike

如何创建只能运行 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

最佳答案

创建一个角色并使其成为 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

关于sql-server - SQL Server - 仅执行存储过程角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17745236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com