【问题标题】:SQL Server 2005 - Granting permission to create stored procedures (but no other objects)SQL Server 2005 - 授予创建存储过程的权限(但没有其他对象)
【发布时间】:2010-09-18 14:45:44
【问题描述】:

我想授予用户创建、更改和执行存储过程的权限,但不能创建其他数据库对象。我将它们排除在角色 db_ddladmin 之外,但明确授予了“创建过程”和“执行”权限。这些权限出现在有效权限列表中。但是,当我尝试使用此登录名创建存储过程时,出现以下错误:

“指定的模式名称“dbo”不存在,或者您没有使用它的权限。”

有什么建议吗?

【问题讨论】:

    标签: sql-server sql-server-2005 stored-procedures database-permissions


    【解决方案1】:

    用户可以在他们拥有的模式中创建过程。所以你可以为用户设置一个模式来做开发工作。然后,如果需要dbo,开发完成后管理员可以放在那里。

    【讨论】:

    • 同意。创建一个新模式,用户将能够在其中创建他们的存储过程。授予他们对该架构的访问权限,您应该一切顺利!
    【解决方案2】:

    如果您可以创建(或更改)和执行存储过程,那么您可以做任何事情。

    对存储过程执行意味着该过程上下文中的所有其他权限。因此,如果您可以更改过程 运行它,那么限制其他任何内容都没有意义。您可以让该程序代表您充当代理。

    【讨论】:

    • 那不是很好。其他 DBMS 允许您创建存储过程,而不必具有创建其他类型对象(例如表)的权限。您无法创建存储过程来执行您无权执行的操作。因此,例如,您可以授予某人创建存储过程以读取或更新数据库中的表的权限,但他们将无法执行创建表或创建存储过程以删除数据库中的所有表之类的操作。数据库。
    • 在 SQL Server 中,只有当用户可以在另一个用户拥有的架构中创建存储过程时,它才是不安全的。存储过程以调用者或所有者(您的选择)的身份运行,并禁止对存储过程所有者拥有的其他对象进行权限检查。所以用户自己的架构是一个可靠的沙箱。
    猜你喜欢
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多