如何授予在 sql 服务器中执行但不查看存储过程的权限

how to grant permission to execute but not view stored procedure in sql server

我是一名开发人员,希望我的 DBA 授予一组用户权限,以在架构 [Rptg] 中执行存储过程并查看结果,但无法查看中的 t-sql 代码存储过程。他们将使用 Azure Data Studio 连接并执行存储过程。我们应该先创建一个角色吗?

你绝对应该使用角色。要确定角色成员无法查看 proc 的文本,您可以添加:

deny view permission on dbo.procx to role25;

拒绝对架构的许可

DENY VIEW DEFINITION ON SCHEMA::Products  to role25;

下面的示例授予角色对 Rptg 架构的执行权限。默认情况下,此角色的成员不会对这些存储过程具有 VIEW DEFINION,正如@JeroenMostert 在评论中所指出的那样。

CREATE ROLE RptgSchemaProcExecutor;
GRANT EXECUTE ON SCHEMA::Rptg TO RptgSchemaProcExecutor;

这是一个示例验证脚本。

CREATE USER ExampleUser WITHOUT LOGIN;
ALTER ROLE RptgSchemaProcExecutor
    ADD  MEMBER ExampleUser;
GO
EXECUTE AS USER = 'ExampleUser';
GO
--this will err with "There is no text for object 'Rptg.ExampleProc'."
EXECUTE sp_helptext  'Rptg.ExampleProc';
GO
REVERT;
GO