我正在使用SQL Server 2008 Express版。
我创建了一个登录,用户,角色和架构。 我已将用户映射到登录名,并将该角色分配给用户。
架构包含许多表和存储过程。
我希望角色对整个架构具有执行权限。
我尝试通过管理工作室授予执行权限,并在查询窗口中输入命令。
GRANT EXEC ON SCHEMA::schema_name TO role_name
但是当我使用SQL管理工作室(作为我创建的登录名)连接到数据库时,我首先看不到存储过程,但更重要的是,在尝试运行它时,我得到了一个权限被拒绝错误。
有问题的存储过程除了从同一个schma中的表中选择数据外什么都不做。
我尝试使用和不使用行创建存储过程:
WITH EXECUTE AS OWNER
这没有任何区别。
我怀疑我在创建架构时遇到了错误,或者某处存在所有权问题,但我真的很难让某些工作变得有效。
我成功设法执行存储过程的唯一方法是授予角色控制权限以及执行权限,但我不相信这是正确,安全的继续进行方式。
任何建议/意见都会非常感激。
感谢。
答案 0 :(得分:4)
在您的案例中我可以看到几个问题。
首先,您需要为您授予查看定义,以便能够在管理工作室中查看对象。
如果您希望角色拥有所有权限,我建议您这样做
GRANT EXECUTE, SELECT, INSERT, UPDATE, DELETE, VIEW DEFINITION
ON Schema::SchemaName TO [RoleName/LoginName]
还要确保用户定义架构的所有者是“dbo”。