如何授予数据库角色对架构的执行权限?我做错了什么?

如何授予数据库角色对架构的执行权限?我做错了什么?

我正在使用 SQL Server 2008 Express 版本。

我已经创建了登录名、用户、角色和模式。我已将用户映射到登录名,并将角色分配给用户。

该模式包含许多表和存储过程。

我希望该角色对整个模式具有执行权限。

我已尝试通过管理工作室并在查询窗口中输入命令来授予执行权限。

GRANT EXEC ON SCHEMA::schema_name TO role_name

但是,当我使用 SQL 管理工作室(作为我创建的登录名)连接到数据库时,首先我看不到存储过程,但更重要的是,当我尝试运行它们时出现权限被拒绝错误。

除了从同一模式中的表中选择数据之外,所讨论的存储过程不执行任何操作。

我尝试过创建包含和不包含以下行的存储过程:

WITH EXECUTE AS OWNER

这并没有什么区别。

我怀疑我在创建模式时犯了一个错误,或者某个地方存在所有权问题,但我真的很难让某些事情正常运作。

我成功执行存储过程的唯一方法是授予角色控制权限以及执行权限,但我不认为这是正确、安全的方法。

如有任何建议或意见,我将非常感谢。

谢谢。

答案1

我不确定如何将其限制到某个模式(尽管您的语法看起来应该可以工作)但如果可以接受对整个数据库拥有执行权限,则以下内容可以解决问题,然后将您的登录名添加到角色,就像 Ankur 描述的那样。

grant execute to <ROLE_NAME>

此外,授予此角色 VIEW DEFINITION 将允许该角色中的登录查看存储过程。

答案2

我使用下面的技术取得了不错的效果(使用名为“我的架构”例如)。听起来您已经准备好了大部分内容,但是架构/角色所有权可能设置不正确。

-- Create the role that will own the schema
CREATE ROLE [myschema_owner] AUTHORIZATION [dbo];

-- Create the role that will have execute permissions on the schema
CREATE ROLE [myschema_execute] AUTHORIZATION [dbo];

-- Create the schema owned by our role
CREATE SCHEMA [myschema] AUTHORIZATION [myschema_owner];

-- Assign execute permissions to execute role
GRANT SELECT, EXECUTE ON SCHEMA::[myschema] TO [myschema_execute];

答案3

使用 SA 登录或 Windows 身份验证打开 SQL Server Management Studio

前往证券 >> 登录

右键单击用户和属性

转至用户映射

选择数据库名称

并分配权限

完毕

相关内容