SQL Server 2005 - 授予创建存储过程的权限(但不包括其他对象)

4
我希望授予用户创建、修改和执行存储过程的权限,但没有创建其他数据库对象的能力。 我将他们从角色db_ddladmin中排除,但明确授予了“创建存储过程”和“执行”权限。 这些权限出现在有效权限列表中。 但是,当我尝试使用此登录名创建存储过程时,我收到以下错误消息:
“指定的架构名称“dbo”不存在,或者您没有使用它的权限。”
有什么建议吗?
2个回答

5

用户可以在自己拥有的架构中创建过程。因此,您可以为用户设置一个架构来进行开发工作。然后,在开发完成后,如果需要成为dbo,则管理员可以将其放置在那里。


1
同意。创建一个新的模式,使用户能够创建他们的存储过程。授予他们访问该模式的权限,然后您就可以开始了! - Dave Markle

2
如果你能创建(或修改)并执行一个存储过程,那么你就可以做任何事情。在存储过程上执行意味着在该过程的上下文中拥有所有其他权限。因此,如果你可以更改一个过程且运行它,那么没有必要限制其他任何东西。你可以让这个过程代表你来执行操作。

这不是很好。其他的数据库管理系统允许您创建存储过程,而无需必须拥有创建其他类型对象(如表)的权限。如果您没有权限执行某些操作,则无法创建存储过程来执行这些操作。例如,您可以授权某人创建一个存储过程来读取或更新数据库中的表,但他们将无法执行诸如创建表或创建一个删除数据库中所有表的存储过程等操作。 - Rob at TVSeries.com
在SQL Server中,只有当用户可以在另一个用户拥有的模式中创建存储过程时才是不安全的。存储过程在调用者或所有者(由您选择)的身份下运行,并抑制对存储过程所有者拥有的其他对象的权限检查。因此,用户自己的模式是一个可靠的沙盒。 - David Browne - Microsoft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接