我正在使用 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
前往证券 >> 登录
右键单击用户和属性
转至用户映射
选择数据库名称
并分配权限
完毕